CASE函数
是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。 可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。
CASE函数分为: 简单CASE函数 和 搜索CASE函数
简单CASE函数
计算测试表达式,按从上到下的书写顺序,将测试表达式的值与每个WHEN子句的简单表达式进行比较:
1. 如果某个简单表达式的值与测试表达式的值相等,则返回第一个与之匹配的WHEN子句所对应的结果表达式的值。
2. 如果所有简单表达式的值与测试表达式的值都不相等, 若指定了ELSE子句,则返回ELSE子句中指定的结果表达式的值; 若没有指定ELSE子句,则返回NULL。
CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2
…
WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
搜索CASE函数
按从上到下的书写顺序计算每个WHEN子句的布尔表达式:
1. 返回第一个取值为TRUE的布尔表达式所对应的结果表达式的值。
2. 如果没有取值为TRUE的布尔表达式, 则当指定了ELSE子句时,返回ELSE子句中指定的结果; 如果没有指定ELSE子句,则返回NULL。
CASE
WHEN 布尔表达式1 THEN 结果表达式1
WHEN 布尔表达式2 THEN 结果表达式2
…
WHEN 布尔表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
例题!!
现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量。本题注意:age为null 也记为 25岁以下。
user_profile表
id | device_id | gender | age | university | gpa | active_days_within_30 | question_cnt | answer_cnt |
1 | 2138 | male | 21 | 北京大学 | 3.4 | 7 | 2 | 12 |
2 | 3214 | male | 复旦大学 | 4 | 15 | 5 | 25 | |
3 | 6543 | female | 20 | 北京大学 | 3.2 | 12 | 3 | 30 |
4 | 2315 | female | 23 | 浙江大学 | 3.6 | 5 | 1 | 2 |
5 | 5432 | male | 25 | 山东大学 | 3.8 | 20 | 15 | 70 |
6 | 2131 | male | 28 | 山东大学 | 3.3 | 15 | 7 | 13 |
7 | 4321 | male | 26 | 复旦大学 | 3.6 | 9 | 6 | 52 |
根据示例,查询应返回以下结果:
age_cut | number |
25岁以下 | 4 |
25岁及以上 | 3 |
SQL语句:
SELECT CASE WHEN age < 25 OR age IS NULL THEN '25岁以下'
WHEN age >= 25 THEN '25岁及以上'
END age_cut,COUNT(*)number
FROM user_profile
GROUP BY age_cut