题解 | #牛客直播各科目同时在线人数#

牛客直播各科目同时在线人数

https://www.nowcoder.com/practice/d69677e41f9a4bf3b3ed7a42573e9490

with
    attendList as (
        select 
            course_id,
            course_name,
            in_datetime as time,
            1 as uv
        from
            course_tb 
            join attend_tb using (course_id)
        union all
        select 
            course_id,
            course_name,
            out_datetime as time,
            -1 as uv
        from    
            course_tb 
            join attend_tb using (course_id)
    ) #将用户的进入时间的次数为1,用户离开直播的时间次数为-1,一个用户同一天可能会有多次进出动作,所以需要将进吃时间绑定course_id,course_name,如没有选择user_id必须用union all 连接
select 
    course_id,
    course_name,
    max(rankingnum)
    from (
    select 
        course_id,
        course_name,
        time,
        uv,
        sum(uv)over(partition by course_id order by time asc  
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW #这段关键词可以不加,这段代表从结果集第一行到当前行的范围,也就是over()函数的默认模式
        ) as rankingnum
    from  
        attendList
    ) t1
    group by 
    course_id,
    course_name

本题难度不高,只需要将进出直播的时间通过unoin all连接即可,唯一难点在于sum()over()聚合函数,之前已有相似例题所以不多赘述。

全部评论

相关推荐

05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
03-31 18:02
门头沟学院 Java
白日梦想家_等打包版:不要的哦佛给我
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务