题解 | #每篇文章同一时刻最大在看人数#
每篇文章同一时刻最大在看人数
https://www.nowcoder.com/practice/fe24c93008b84e9592b35faa15755e48
明确题意:
统计每篇文章同一时刻最大在看人数,如果同一时刻有进入也有离开时,先记录用户数增加再记录减少
问题分解:
计算人数变动情况:进入(select artical_id ,in_time dt, 1 uv)union 退出(select artical_id ,out_time dt, -1 uv)
计算瞬时在看人数:sum(uv) over(partition by artical_id order by dt, uv desc)
按文章分组:group by artical_id
计算最大在看人数:max(uv_cnt)
细节问题:
按最大人数降序:order by max_uv desc
select artical_id, max(uv_cnt) max_uv from( select artical_id, sum(uv) over(partition by artical_id order by dt, uv desc) uv_cnt from( select artical_id, in_time dt, 1 uv from tb_user_log where artical_id != 0 union all select artical_id, out_time dt, -1 uv from tb_user_log where artical_id != 0 ) t1 ) t2 group by artical_id order by max_uv desc;