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

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

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

全部评论

相关推荐

03-01 19:30
已编辑
南京大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务