题解 | 每篇文章同一时刻最大在看人数
每篇文章同一时刻最大在看人数
https://www.nowcoder.com/practice/fe24c93008b84e9592b35faa15755e48
--同时阅读文章的最大在线人数,刚开始真的挺烧脑子的,但是呢从另一个方面想,对进出者两个进行编码,随后进行窗口函数的聚合,不就可以求出最大的在线人数来嘛,但是又存在一个问题那就是同时进行的人有一个卡出去了呢,这个就得在窗口函数的排序中对编码进行降序排序,先统计同一时间内进入的再统计退出的
WITH base AS (
SELECT
artical_id,
in_time AS time,
1 AS uv
FROM tb_user_log
WHERE artical_id <> 0
UNION ALL
SELECT
artical_id,
out_time AS time,
-1 AS uv
FROM tb_user_log
WHERE artical_id <> 0
),
tongji AS (
SELECT
artical_id,
time,
uv,
SUM(uv) OVER (PARTITION BY artical_id ORDER BY time, uv DESC) AS juhe
FROM base
)
SELECT
artical_id,
MAX(juhe) AS max_uv
FROM tongji
GROUP BY artical_id
ORDER BY max_uv DESC;
查看1道真题和解析