题解 | #每篇文章同一时刻最大在看人数#
每篇文章同一时刻最大在看人数
https://www.nowcoder.com/practice/fe24c93008b84e9592b35faa15755e48
#需求:统计每篇文章同一时刻最大在看人数;同一时刻有进入也有离开时,先记录用户数增加再记录减少
#输出:文章ID、最大瞬时观看人数
#要求:max_uv降序;artical_id<>0;
#特殊点:同一时刻有进入也有离开时,先记录用户数增加再记录减少
#思路:计算瞬时情况的需求,对用户进入和离开的时间编码+union;编码后得到的观看人数进行开窗求max
select artical_id,max(ck1) max_uv
from(
select artical_id,sum(tt2)over(partition by artical_id order by tt1,tt2 desc) ck1
#这里满足‘先记录用户数增加再记录减少’的需求;
#假设现在是3,然后加一减一就是先4后3,这样记录到最大的值是4;如果减一加一,就是先2后3,记录到最大的值是3,得到的结果就不一致
from(
select artical_id,in_time tt1,1 tt2 from tb_user_log where artical_id<>0
union all
#不做去重,因为可能存在进入时间与离开时间相一致到秒的情况
select artical_id,out_time tt1,-1 tt2 from tb_user_log where artical_id<>0
) t1
) t2
group by 1
order by 2 desc
查看30道真题和解析