SQL题解之使用union和sum解决同时在线人数问题

现有各直播间的用户访问记录表(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

现要求统计各直播间最大同时在线人数,期望结果如下:

       

live_id
<int>
(直播id)
max_user_count
<int>
(最大人数)
1 4
2 3
3 2

--- 1.计算逻辑

    对于同时在线人数问题,可以把数据进行处理后,然后将出入时间变成一个字段,同时打上标记为1或-1表示进入离开直播间,同时使用sum()函数累加这个字段,最大值为峰值人数

-- 1.对数据进行处理

     in_datetime dt,   out_datetime dt 设置为时间日期字段,同时打上进入出去标记1,-1

-- 2.union成一个字段

   

     select
        live_id,
        in_datetime dt,
        1 flag
    from live_events
    union all
    select 
        live_id,
        out_datetime,
        -1
    from live_events
-- 3.使用sum over()开窗函数累加人数

     按照直播间分区并按照时间进行排序

 sum(flag) over(partition by live_id order by dt asc) as ct
--4. 求最大的人数

    按照直播间分组,求最大人数

 max(ct) as  max_user_count
group by live_id
-- 5.最终SQL
   
select
	live_id,
    max(ct) as  max_user_count
from 
(
  select
      live_id,
      dt,
      sum(flag) over(partition by live_id order by dt asc) as ct
  from 
  (
    select
        live_id,
        in_datetime dt,
        1 flag
    from live_events
    union all
    select 
        live_id,
        out_datetime,
        -1
    from live_events
  )t1
)t2
group by live_id

相关推荐

  1. SQL题解使用unionsum解决同时线人数问题

    2024-02-01 00:32:01       60 阅读
  2. SQL:求同时线人数问题

    2024-02-01 00:32:01       41 阅读
  3. SQL面试题挑战02:同时最大在线人数问题

    2024-02-01 00:32:01       64 阅读
  4. sql注入union联合注入

    2024-02-01 00:32:01       52 阅读
  5. SQL UNION

    2024-02-01 00:32:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-01 00:32:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-01 00:32:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-01 00:32:01       87 阅读
  4. Python语言-面向对象

    2024-02-01 00:32:01       96 阅读

热门阅读

  1. 阿里巴巴中国站获得1688商品详情 API

    2024-02-01 00:32:01       66 阅读
  2. 「优选算法刷题」:提莫攻击

    2024-02-01 00:32:01       47 阅读
  3. 计算机网络

    2024-02-01 00:32:01       68 阅读
  4. 龙哥风向标20231114 GPT拆解

    2024-02-01 00:32:01       46 阅读
  5. mysqldump 导出中文乱码问题

    2024-02-01 00:32:01       61 阅读
  6. ArcGIS空间分析方法计算城市气体扩散

    2024-02-01 00:32:01       49 阅读
  7. Liunx shell编程及自动化运维实现--第三章循环

    2024-02-01 00:32:01       55 阅读