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

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

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

select artical_id
        ,max(uv) AS max_uv
from(
    select artical_id
        ,sum(flag) over(partition by artical_id order by act_time asc,flag desc) AS uv
    from(
        select artical_id
            ,in_time AS act_time
            ,1 AS flag
        from tb_user_log
        where artical_id <> 0
        union all
        select artical_id
                ,out_time AS act_time
                ,-1 AS flag
        from tb_user_log
        where artical_id <> 0
    )t1
)t2
group by artical_id
order by max_uv desc

1、求的是每篇文章同一时刻最大在线人数===》每个时刻累计在线人数,求哪个时刻的累计在线人数最大。这个过程有进有出

2、需要把各个用户进去的时间标记为1,出来时间的标记为-1,然后用开窗函数sum进行组内累计求和,按照artical_id,用开窗函数sum(flag) over(partition by artical_id order by act_time, flag desc). sum(flag)是对进入和离开的人数进行求和,规则是按照文章id分组,按照时间升序排序,flag降序排序是为了达到题目的要求(同时进去和离开的,先加再减)。这样就可以求出每篇文章在各个时刻的累计在线人数。最后用max就可以求出最大同时在线人数。

全部评论

相关推荐

职场水母:为啥你们整简历都喜欢整一大堆没用的,是期待让hr觉得很多,自己很厉害吗
0offer是寒冬太冷还...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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