文章目录
- 题目需求
- 思路一
- 实现一
- 学习链接
- 题目来源
 
 
 
题目需求
现有各直播间的用户访问记录表(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



















