题解 | #计算25岁以上和以下的用户数量#
计算25岁以上和以下的用户数量
https://www.nowcoder.com/practice/30f9f470390a4a8a8dd3b8e1f8c7a9fa
select CASE when age < 25 or age is NULL THEN '25岁以下' when age >= 25 THEN '25岁及以上' end age_cut, count(device_id) as number from user_profile group by age_cut
CASE函数
是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。
可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。
分为:
简单CASE函数
搜索CASE函数
简单 CASE函数
1 2 3 4 5 6 |
|
计算测试表达式,按从上到下的书写顺序将测试表达式的值与每个WHEN子句的简单表达式进行比较。
如果某个简单表达式的值与测试表达式的值相等,则返回第一个与之匹配的WHEN子句所对应的结果表达式的值。
如果所有简单表达式的值与测试表达式的值都不相等,
若指定了ELSE子句,则返回ELSE子句中指定的结果表达式的值;
若没有指定ELSE子句,则返回NULL。
例48. 查询班级表中的学生的班号、班名、系号和班主任号,并对系号作如下处理:
当系号为1时,显示 “计算机系”;
当系号为2时,显示 “软件工程系”;
当系号为3时,显示 “物联网系”。
1 2 3 4 5 6 7 |
|
搜索CASE函数
1 2 3 4 5 6 |
|
按从上到下的书写顺序计算每个WHEN子句的布尔表达式。
返回第一个取值为TRUE的布尔表达式所对应的结果表达式的值。
如果没有取值为TRUE的布尔表达式,
则当指定了ELSE子句时,返回ELSE子句中指定的结果;
如果没有指定ELSE子句,则返回NULL。
例48用搜索CASE来做:
1 2 3 4 5 6 7 |
|
例49.查询“M01F011”号课程的考试情况,列出学号、课程号和成绩,同时将百分制成绩显示为等级。
1 2 3 4 5 6 7 8 9 10 |
|
CASE函数(续)
例50.统计每个班男生和女生的数量各是多少,统计结果的表头为,班号,男生数量,女生数量。
1 2 3 4 |
|
例51.判断成绩的等级,85-100为“优”,70-84为“良”,60-69为“及格”,60以下为“不及格”,并统计每一等级的人数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
select '25岁以下' as age_cut, count(device_id) as number from user_profile where age < 25 or age is NULL union select '25岁及以上' as age_cut, count(device_id) as number from user_profile where age >= 25
select if ( age < 25 or age is NULL, '25岁以下', '25岁及以上' ) as age_cut, count(device_id) as number from user_profile group by age_cut