前言
练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。
今日题目:
1435.制作会话柱状图
表:Sessions
列名 | 类型 |
---|---|
session_id | int |
duration | int |
session_id 是该表主键,duration 是用户访问应用的时间, 以秒为单位
你想知道用户在你的 app 上的访问时长情况。因此你决定统计访问时长区间分别为 “[0-5>”,“[5-10>”,“[10-15>” 和 “15 minutes or more” 的会话数量,并以此绘制柱状图。
写一个解决方案来报告 (bin, total) 。
返回结果 无顺序要求 。
我那不值一提的想法:
- 首先梳理表内容,题干一共给了一张会话表,记录了会话id,用户访问应用时间。
- 其次分析需求,你想知道用户在你的 app 上的访问时长情况。因此你决定统计访问时长区间分别为 “[0-5>”,“[5-10>”,“[10-15>” 和 “15 minutes or more” 的会话数量,并以此绘制柱状图。
- 这种逻辑判断题,一般都用case when
- 我们首先创建bin表
- 然后使用case when 判断每个区间的数量
- 再用完整bin表左连接数量表
with bin_1 as(
select "[0-5>" as bin
union
select "[5-10>" as bin
union
select "[10-15>" as bin
union
select "15 or more" as bin
)
,
bin_count as (
select
case
when duration >= 0 and duration < 300 then "[0-5>"
when duration >= 300 and duration < 600 then "[5-10>"
when duration >= 600 and duration < 900 then "[10-15>"
else "15 or more"
end as bin,count(*) as total
from Sessions
group by bin
)
select b1.bin,ifnull(total,0) as total
from bin_1 b1
left join bin_count b2
on b1.bin = b2.bin
结果:
总结:
能运行就行。