MySQL 的 CASE WHEN 用法说明

袁志蒙 2539次浏览

摘要:MySQL触发器里的流程控制语句的 CASE WHEN 的语法有两种:一、简单函数CASE [col_name] WHEN [value1] THEN [result1] ELSE [default] END举个例子:...

MySQL触发器里的流程控制语句的 CASE WHEN 的语法有两种:

一、简单函数

CASE [col_name] WHEN [value1] THEN [result1] ELSE [default] END

举个例子:

SELECT
	`groupid`,
	`status`,
	CASE
		WHEN groupid = '1' THEN '初来乍到'
		WHEN groupid = '2' THEN '新手上路'
		WHEN groupid = '3' THEN '融会贯通'
		ELSE '未知'
	END AS groupname,
	CASE
		WHEN `status` = '1' THEN '正常'
		ELSE '未通过'
	END AS status_name
FROM
	yzm_member
LIMIT 20

二、搜索函数

CASE WHEN [expr] THEN [result1] ELSE [default] END

搜索函数可以写判断,并且搜索函数只会返回第一个符合条件的值,符合条件的值也可以是表的字段,其他case被忽略,举个例子:

SELECT
	`groupid`,
	`status`,
	CASE
		WHEN groupid < '3' THEN '新手'
		ELSE '高级'
	END AS groupname,
	CASE
		WHEN `status` = '1' THEN '正常'
		ELSE '未通过'
	END AS status_name
FROM
	yzm_member
LIMIT 20


搜索函数与聚合函数结合使用,举个例子:

#1.查询出每门课程的及格人数和不及格人数

SELECT 课程号,
	sum(case when 成绩 >= 60 then 1 else 0 end) as 及格人数,
	sum(case when 成绩 < 60 then 1 else 0 end) as 不及格人数
FROM score
	GROUP BY 课程号;


#2.简单函数,实现行列互换

SELECT 学号, 
	max(case 课程号 when '0001' THEN 成绩 else 0 END) as `课程0001`,
	max(case 课程号 when '0002' THEN 成绩 else 0 END) as `课程0002`,
	max(case 课程号 when '0003' THEN 成绩 else 0 END) as `课程0003`
FROM score
	GROUP BY 学号



随机内容

表情

共2条评论
  • 网友评论:

    long time no see

    2021-09-19 23:08:46 回复

    点击加载
  • 网友评论:

    现在是深夜11点,越是夜深人静的时候,想的越明白,很受用

    2021-09-19 23:06:08 回复

    点击加载