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

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

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

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

🌟🌟🌟同一时刻在看的最大人数

🌟将一条记录按照进入时间和退出时间拆分为2条,用UNION ALL连接,不能用UNION❗️

注意union的两个部分都需要用( )包含起来

进入记录标记为num=1,表示该时刻观看人数+1

退出记录标记为num=-1,表示该时刻观看人数-1

则同一时刻在看的最大人数为 sum(num) over(partition by article_id order by time, num desc)

根据题目要求,统一时间的进入和退出记录需要先+1再-1,所以必须限制order by num

两个排序字段缺一不可❗️

全部评论

相关推荐

投递腾讯等公司6个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务