41. 同时在线人数问题

题目需求

现有各直播间的用户访问记录表(live_events)如下。

表中每行数据表达的信息为:一个用户何时进入了一个直播间,又在何时离开了该直播间。

现要求统计各直播间最大同时在线人数。

期望结果如下(截取部分):

live_id (直播id)max_user_count (最大人数)
14
22
32

需要用到的表:

直播间的用户访问记录表:live_events

user_id (用户id)live_id (直播间id)in_datetime (进入直播间的时间)out_datetime (离开直播间的时间)
10012021-12-1 19:30:002021-12-1 19:53:00
10022021-12-1 21:01:002021-12-1 22:00:00
10112021-12-1 19:05:002021-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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dataer__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值