每篇文章同一时刻最大在看人数(同时在线/阅读人数)

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

https://www.nowcoder.com/practice/fe24c93008b84e9592b35faa15755e48

select
    artical_id
    ,max(max_uv) max_uv
from (
    select
        artical_id
        ,sum(num)over(partition by artical_id order by dt asc, num desc) max_uv
    from (
        select
            artical_id
            ,in_time dt
            ,1 as num
        from tb_user_log
        where artical_id != 0
        union all
        select
            artical_id
            ,out_time dt
            ,-1 as num
        from tb_user_log
        where artical_id != 0
    ) t
) t
group by 1
order by max_uv desc
  • 将用户的进入时间单独拎出来,同时记为1;离开时间单独拎出来,同时记为-1,这样就聚合这两个表,按照时间排序,意思就是:进去一个加1,离开一个减1。
  • 然后利用窗口函数对计数(1或者-1)求累计和,因为题目规定:同一时间有就有出的话先算进来的后算出去的,所以排序的时候就要看好了先按时间排序,再按计数排序!
  • 然后再在每个分组里面去max最大的累积和就是最多同时在线的人数了
全部评论

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务