此题共包含一张表:

表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