牛客网刷题学习SQL(六)

SQL26 计算25岁以上和以下的用户数量

在这里插入图片描述
在这里插入图片描述
首先分析题目:
将用户划分为25岁以下age为null 也记为 25岁以下25岁及以上两个年龄段,分别查看这两个年龄段用户数量

由此可知我们可以使用之前学到的关键词union合并两个sql

select "25岁以下" age_cut,count(device_id) number 
from  user_profile
where age < 25 or age is null
union 
select "25岁及以上" age_cut,count(device_id) number 
from  user_profile
where age >= 25 

==其次:==这次学一个新的关键词

CASE
WHEN 布尔表达式1 THEN 结果表达式1
WHEN 布尔表达式2 THEN 结果表达式2WHEN 布尔表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
select 
    case when age<25 or age is null then '25岁以下'
         when age>=25 then '25岁及以上'
         end age_cut,count(device_id) number
from user_profile
group by age_cut

总结一下:

case函数的两个使用方法:
方法1:

CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
SELECT 班号 ,班名,
CASE 系号
WHEN 1 THEN '软件工程系'
WHEN 2 THEN '计算机系'
WHEN 3 THEN '物联网系'
END AS 系号,班主任号
FROM 班级表

方法2:

CASE
WHEN 布尔表达式1 THEN 结果表达式1
WHEN 布尔表达式2 THEN 结果表达式2WHEN 布尔表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END

例:
1.统计每个班男生和女生的数量各是多少,统计结果的表头为,班号,男生数量,女生数量。

SELECT 班号,
COUNT(CASE WHEN 性别=‘男’ THEN ‘男’ END) 男生数,
COUNT(CASE WHEN 性别=‘女’ THEN ‘女’ END) 女生数
FROM 学生表 GROUP BY 班号

2。判断成绩的等级,85-100为“优”,70-84为“良”,60-69为“及格”,60以下为“不及格”,并统计每一等级的人数。

SELECT
CASE
WHEN GRADE BETWEEN 85 AND 100 THEN '优'
WHEN GRADE BETWEEN 70 AND 84 THEN '良'
WHEN GRADE BETWEEN 60 AND 69 THEN '及格'
ELSE '不及格'
END 等级, COUNT(*) 人数
FROM SC
GROUP BY
CASE
WHEN GRADE BETWEEN 85 AND 100 THEN '优'
WHEN GRADE BETWEEN 70 AND 84 THEN '良'
WHEN GRADE BETWEEN 60 AND 69 THEN '及格'
ELSE '不及格'
END

猜你喜欢

转载自blog.csdn.net/qq_53037676/article/details/130995702