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

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

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

SELECT DISTINCT artical_id, 
MAX(num_per) OVER (PARTITION BY artical_id) AS max_uv
FROM(
    SELECT *,
    SUM(count_num) OVER (PARTITION BY artical_id ORDER BY timed, count_num DESC) AS num_per
    FROM(
        SELECT uid,artical_id, in_time AS timed, 1 AS count_num
        FROM tb_user_log
        WHERE artical_id != 0
        UNION
        SELECT uid,artical_id,out_time AS timed, -1 AS count_num
        FROM tb_user_log
        WHERE artical_id != 0
        ) AS t
    ) as t2
ORDER BY max_uv DESC



存档 又是一道优雅例题

1、in_time的时刻在看人数+1,out_time时刻在看人数-1

2、每一组artical_id内 对时间排序后 顺序的累加就可以算出每个时刻在看的人数

3、最后找出每组artical_id内最大的在看人数就是题目要求的同一时刻最大在看人数了

注意,要把uid一起筛选,不然union会被去除重复项,导致结果出错。

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务