现有表用户行为日志表tb_user_log
场景逻辑说明:artical_id-文章ID代表用户浏览的文章的ID,artical_id-文章ID为0表示用户在非文章内容页(比如App内的列表页、活动页等)。
问题:统计每篇文章同一时刻最大在看人数,如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,结果按最大人数降序。
解题思路与代码:
本题需求不难理解,难点在于如何计算瞬时的最大计数(在看人数)
首先,我们自然会想到常见的编码+联立。在此对原表in_time和out_time进行编码,in为观看人数+1, out为观看人数-1,用UNION ALL进行两次SELECT联立后再按in/out时间排序,最后用窗口函数按视频号分类,并按时间累加在线观看人数即可,代码如下:
SELECT artical_id,max(all_uv) max_uv FROM
(SELECT artical_id,sum(uv) ove