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

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

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:27
明天又是董事长面,啥时候是个头啊
在太阳里长大的人:公司就仨人吧😂
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 10:39
一个证都没 我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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