此题共包含一张表:
表1:用户行为日志表tb_user_log
要解决的问题:
统计每篇文章同一时刻最大在看人数,如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,结果按最大人数降序。
解题思路:
- 计算每篇文章的在看人数,in_time记作1,out_time记作-1 --- 表1
- 窗口函数,以arical_id分组,时间排序,由于题目要求先记录增加的用户数,再记录用户的减少数,所以要再按1式的降序排序
- 添加条件artical_id !=0 --- 表2
- 从表2中筛选出artical_id, 以及max(观看人数)
- 以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