CASE表达式的写法
CASE表达式有简单CASE表达式和搜索CASE表达式两种写法
-- 简单CASE表达式
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
-- 搜索CASE表达式
CASE WHEN sex = '1' THEN '男'
WHEN SEX = '2' THEN '女'
ELSE '其他' END
使用CASE表达式的时候,需注意以下几点:
- 统一各分支返回的数据类型
- 不要忘记写END
- 养成写ELSE子句的习惯(ELSE子句是可选的,不写也不会出错,不写时,CASE表达式的执行结果是NULL)
行转列
SELECT pref_name,
-- 男性人口
SUM(CASE WHEN sex='1' THEN population ELSE 0 END) AS cnt_m,
-- 女性人口
SUM(CASE WHEN sex = '2' THEN population ELSE 0 END) AS cnt_f
FROM PopTbl2
GROUP BY pref_name;
除了SUM,COUNT、AVG等聚合函数也都可以用于将行结构的数据转换成列结构的数据
用CHECK约束定义多个列的条件关系
逻辑与和蕴含式
在UPDATE语句里进行条件分支
UPDATE Salaries
SET salary = CASE WHEN salary >= 300000
THEN salary * 0.9
WHEN salary >= 250000 AND salary < 280000
THEN salary * 1.2
ELSE salary END;
表之间的数据匹配
CASE表达式的一大优势在于能够判断表达式,也就是说,在CASE表达式里,我们可以使用BETWEEN、LIKE和<、>等便利的谓词组合,以及能够嵌套子查询的IN 和EXISTS谓词
在CASE表达式中使用聚合函数
SELECT std_id,
CASE WHEN COUNT(*) = 1
THEN MAX(club_id)
ELSE MAX(CASE WHEN main_club_flg = 'Y'
THEN club_id
ELSE NULL END)
END AS main_club
FROM StudentClub
GROUP BY std_id;
CASE表达式用在SELECT子句里时,既可以写在聚合函数内部,也可以写在聚合函数外部