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

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

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

# 坑1:统计每篇文章同一时刻最大在看人数,如果同一时刻有进入也有离开时,先记录用户数增加再记录减少
# ORDER BY dt,uv DESC 按照时间升序、uv降序做累加
# 坑2:artical_id-文章ID为0表示用户在非文章内容页
# 所以需要用 WHERE artical_id != 0 过滤

# 解读这个窗口函数:order by+窗口范围,也就是说,每一个dt都要加上对应的uv,对uv进行sum,总共dt次;
# 最终在外层取出max的那个,为什么要外层,我也不知道,max加在里面会报错; 求告知原因orz
# SQL_ERROR_INFO: "You cannot use the window function 'sum' in this context.'"

SELECT artical_id,MAX(uv_cnt)max_uv
FROM
(
    SELECT artical_id, SUM(uv) OVER(PARTITION BY artical_id ORDER BY dt,uv DESC) uv_cnt 
    FROM
        (
        SELECT id,artical_id, in_time AS dt, 1 AS uv #为所有进去的时间记录uv+1,一个用户进去多次也会记录多次,所以实际uid并不重要
        FROM tb_user_log
        UNION 
        SELECT id,artical_id, out_time AS dt, -1 AS uv
        FROM tb_user_log
        ) t1 WHERE artical_id != 0
) t2
GROUP BY artical_id
ORDER BY max_uv DESC

全部评论

相关推荐

评论
1
收藏
分享
牛客网
牛客企业服务