文章目录
- 题目需求
- 思路一
- 实现一
- 学习链接
- 题目来源
题目需求
现有各直播间的用户访问记录表(live_events)如下。
表中每行数据表达的信息为:一个用户何时进入了一个直播间,又在何时离开了该直播间。
现要求统计各直播间最大同时在线人数。
期望结果如下(截取部分):
live_id (直播id) | max_user_count (最大人数) |
---|---|
1 | 4 |
2 | 2 |
3 | 2 |
需要用到的表:
直播间的用户访问记录表:live_events
user_id (用户id) | live_id (直播间id) | in_datetime (进入直播间的时间) | out_datetime (离开直播间的时间) |
---|---|---|---|
100 | 1 | 2021-12-1 19:30:00 | 2021-12-1 19:53:00 |
100 | 2 | 2021-12-1 21:01:00 | 2021-12-1 22:00:00 |
101 | 1 | 2021-12-1 19:05:00 | 2021-12-1 20:55:00 |
思路一
实现一
-- 3) 统计每个直播间 最大同时在线人数
select live_id,
max(current_num) as max_user_count
from (
-- 2)按照 live_id 进行分组,统计 同时在线人数
select live_id,
active_date,
user_id,
flag,
-- 此处存在重复计算的问题
sum(flag) over (partition by live_id order by active_date) as current_num
from (
-- 1) 标记 进入直播间为1,离开直播间为-1
select user_id,
live_id,
in_datetime as active_date,
1 as flag -- 进入直播间
from live_events
union
select user_id,
live_id,
out_datetime as active_date,
-1 as flag -- 离开直播间
from live_events
) t1
) t2
group by live_id;
学习链接
SQL解决最多同时在线人数问题(同时视频观看人数,同时浏览人数,同时等车人数)
Hive 应用:explode 和 lateral view
题目来源
http://practice.atguigu.cn/#/question/41/desc?qType=SQL