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

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

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

### 不好意思又是一篇照搬别人代码的行为。一开始我的思路出劈叉了,我想着通过先计算某个瞬时时刻,然后通过瞬时时刻分组计算每个时刻的进出总人数,再比较出每篇文章的最大进出总人数;参考了别人的写法之后,我顿悟了,将in_time 时间记作1,代表人数增加,将out_time记作-1,代表人数的减少,先统计所有时刻及对应的人数增加及减少,然后根据sum() over() 窗口函数统计每个截止时刻的进出总人数:sum(diff) over(partition by artical_id order by dt,diff desc)


### 每篇文章同一时刻最大在看人数   
 
       # 统计截止到每个时刻 每篇文章的在浏览人数   
       
       select  artical_id,
               max(sumUv) max_uv 
               from (
       select  artical_id,
               dt ,
               sum(diff) over(partition by artical_id order by dt,diff desc) sumUv  # 每篇文章截止时间的进出总人数
         from (
        select artical_id ,
               in_time dt,
               1 diff 
          from tb_user_log where artical_id != 0 
          union all 
        select artical_id,
               out_time dt,
               -1 diff 
          from tb_user_log where artical_id != 0 
          ) A 
          ) B group by B.artical_id order by max_uv desc ;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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