题解 | 每篇文章同一时刻最大在看人数

select artical_id,max(cnt) max_uv from 
(select artical_id,
sum(num) over (partition by artical_id order by dt asc,num desc) as cnt
from
(select artical_id,in_time dt,1 num from tb_user_log
where artical_id != 0
union all 
select artical_id,out_time dt,-1 num from tb_user_log
where artical_id != 0 ) as a) as b
group by artical_id
order by max_uv desc

①将用户的进入时间单独拎出来,同时记为1;离开时间单独拎出来,同时记为-1,这样就聚合这两个表,按照时间排序,意思就是:进去一个加1,离开一个减1。

②然后利用窗口函数对计数(1或者-1)求累计和,因为题目规定:同一时间有就有出的话先算进来的后算出去的,所以排序的时候就要看好了先按时间排序,再按计数排序!

③然后再在每个分组里面去求最大的累积和就是最多同时在线的人数了!

以上转载于网络

全部评论

相关推荐

不愿透露姓名的神秘牛友
01-06 14:27
美团 算法工程师 35k*15.5+20 硕士985
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务