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

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

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

此题共包含一张表:

表1:用户行为日志表tb_user_log

要解决的问题:

统计每篇文章同一时刻最大在看人数,如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,结果按最大人数降序。

解题思路:

  1. 计算每篇文章的在看人数,in_time记作1,out_time记作-1 --- 表1
  2. 窗口函数,以arical_id分组,时间排序,由于题目要求先记录增加的用户数,再记录用户的减少数,所以要再按1式的降序排序
  3. 添加条件artical_id !=0 --- 表2
  4. 从表2中筛选出artical_id, 以及max(观看人数)
  5. 以artical_id分组,max(观看人数)降序排列
select artical_id, max(cur_t) max_uv
from(
    select artical_id, t,
    sum(uv) over (PARTITION by artical_id ORDER BY t, uv desc) cur_t
    from(

      SELECT artical_id, in_time t, 1 uv
      from tb_user_log
      UNION all
      SELECT artical_id, out_time t, -1 uv
      from tb_user_log
    ) t1
    where artical_id != 0
) t2
group by artical_id
ORDER BY max_uv desc
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:47
机械打工仔:你自己匿名可以,这么好的公司就别给它匿名了
点赞 评论 收藏
分享
舂锋:不能投什么岗都用一份简历,一般都是要看企业的岗位需求来写职业技能或者是项目经历,跟岗位相关的就写多一点。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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