计算直播间最高在线人数

本文探讨如何使用SQL解决计算每个直播间的最高在线人数问题。通过按直播间ID分类,并按时间顺序排列数据,通过模拟用户进入和退出直播间的过程,动态更新最高在线人数,最终得到每个直播间的最大在线人数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下有一份直播间的数据

room_iduser_idstart_timeend_time
001234352021-11-01 12:09:232021-11-01 12:24:54
001446252021-11-01 18:34:262021-11-01 19:35:13
002357802021-11-01 16:24:432021-11-01 15:54:22
004433252021-11-01 19:04:212021-11-01 21:13:23
006678952021-11-01 20:13:422021-11-01 23:09:26

字段解释:

  • room_id为每个直播间的唯一ID标识
  • user_id为每个用户的唯一ID标识
  • start_time为每个用户进入直播间的时间
  • end_time为每个用户退出直播间的时间

问题:求每个直播间的最高在线人数

思路:

  • 每一条数据其实就是对应一条用户的数据,每个start_time相当于直播间用户数加1,每个end_time直播间的用户数减1.
  • 一般的想法就是先按直播间分类,对于每个直播间的数据按时间顺序排列.定义一个变量user_num和max_user_num,每进入一个用户将user_num值加1并和max_user_num进行比较,如果user_num>max_user_num则将user_num的值赋给max_user_num,每退出一个用户将user_num减1,遍历所有的数据,最后的max_user_num就是最高在线人数
  • 对于sql,可以借鉴上面的思路,具体代码如下:
select room_id
      ,max(user_num) as max_user_num
from (
	select room_id
	      ,start_time
	      ,sum(flag) over(partition by room_id order by start_time asc) user_num
	from (
		select room_id
		      ,start_time
		      ,1 as flag
		from temp
		union all
		select room_id
		      ,end_time as start_time
		      ,-1 as flag
		from temp
	) a
) b
group by room_id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhang_zero

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

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

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

打赏作者

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

抵扣说明:

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

余额充值