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

【场景】:同一时刻在线人数

【分类】:窗口函数、tag标记、嵌套子查询

分析思路

难点:

1.同一时刻的在线人数 区别于 某个时刻之前的在线人数

(1)用tag标记增加还是减少

进入增加1,出去减少1

  • [使用]:union;1 as tag;-1 as tag

(2)统计每个时刻的在看人数

如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,所以在窗口函数中使用sum()需要order by dt,tag desc

  • [使用]:sum(tag) over (partition by artical_id order by dt,tag desc)

(3)求在看人数的最大值

  • [使用]:group by exam_id;order by uv desc,avg_score

扩展

前往查看: MySQL 在线人数 场景分析

求解代码

方法一:

with 子句

with
    main as(
        #用tag标记增加还是减少
        (select
            artical_id,
            uid,
            in_time as dt,
            1 as tag
        from tb_user_log
        where artical_id != 0)
        union
        (select
            artical_id,
            uid,
            out_time as dt,
            -1 as tag
        from tb_user_log
        where artical_id != 0)
    ),
    main1 as(
        #如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,所以在窗口函数中使用sum()需要order by dt,tag desc
        select
            artical_id,
            sum(tag) over (partition by artical_id order by dt,tag desc) as uv
        from main
    )
#统计每篇文章同一时刻最大在看人数,结果按最大人数降序 
select
    artical_id,
    max(uv) as max_uv
from main1
group by artical_id
order by max_uv desc

方法二:

嵌套子查询 + from子查询

#统计每篇文章同一时刻最大在看人数,结果按最大人数降序 
select
    artical_id,
    max(uv) as max_uv
from(
    #如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,所以在窗口函数中使用sum()需要order by dt,tag desc
    select
        artical_id,
        sum(tag) over (partition by artical_id order by dt,tag desc) as uv
    from(
        #用tag标记增加还是减少
        (select
            artical_id,
            uid,
            in_time as dt,
            1 as tag
        from tb_user_log
        where artical_id != 0)
        union
        (select
            artical_id,
            uid,
            out_time as dt,
            -1 as tag
        from tb_user_log
        where artical_id != 0)
    ) main
) main1
group by artical_id
order by max_uv desc
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-17 14:38
干个蛋,干不了一点!!!!我真服了,还没搞完,很急。 今天ddl,活没干完直接通宵,刺激。食堂很好吃,感觉离职的时候会胖10斤。mt喜欢能直接干活的,没空指导我,很难受。每个人都是笑嘻嘻的,但是从他们聊天中都能感受到各种试探,我有点慌了大家真的nb,都能准时完成工作下班,我羡慕啊!!!!!每天好累,想离职了💔
牛客26106072...:能去字节实习说明你的能力挺被认可的,实习中的这种累更有利于个人职场成长,试着当熬夜打游戏一样熬一熬,实习的意义就是看自己的差距和适应能力,总比等到工作时各种不适应辞职要好得多吧?
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
9
13
分享

创作者周榜

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