题目三 :SQL26 计算25岁以上和以下的用户数量
链接:计算25岁以上和以下的用户数量_牛客题霸_牛客网 (nowcoder.com)
问题分解:
简单 CASE函数
是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。
可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。
分为:
简单CASE函数
搜索CASE函数
CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2 …
WHEN 简单表达式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(*)number
from user_profile
group by age_cut;
题目四 :SQL27 查看不同年龄段的用户明细
链接:查看不同年龄段的用户明细_牛客题霸_牛客网 (nowcoder.com)
题目解答:
问题分解:
- 限定条件:无;
- 划分年龄段:数值条件判断,可以用多重if,不过更方便的是用
case when [expr] then [result1]...else [default] end
- 附:case when用法
答案:
-
select device_id , gender , case when age < 20 then '20岁以下' when age >= 20 and age <=24 then '20-24岁' when age >= 25 then '25岁及以上' else '其他' END as age_cut from user_profile;
题目五: SQL28 计算用户8月每天的练题数量
链接:计算用户8月每天的练题数量_牛客题霸_牛客网 (nowcoder.com)
问题分解:
- 限定条件:2021年8月,写法有很多种,比如用year/month函数的
year(date)=2021 and month(date)=8
,比如用date_format函数的date_format(date, "%Y-%m")="202108"
- 每天:按天分组
group by date
- 题目数量:count(question_id)
答案:
select day(date) as day,
count(question_id) as question_cnt
from question_practice_detail
where month(date) = 8 and year(date)=2021
group by date;