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

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

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

-- 思路:
--  1.对in_datetime与out_datetime编码 status:in观看人数+1,out观看人数-1,然后union all 结果为临时表temp
--  2.对表temp使用SUM窗口函数,按课程id维度,统计按时间戳升序的观看人数变化情况:
--      其中题目要求:如果同一时刻有进入也有离开时,先记录学员数增加再记录减少
--      则--    按照dt升序,status倒序统计    --
--  3.按照课程id分组,取每个课程同时在线观看的最大人数即可


--  3.按照artical_id分组,取每个文章同时在线阅读的最大人数即可
select
    t1.course_id,
    c.course_name,
    max(course_instant_unt) as max_num
from
    (
        select
            course_id,
            dt,
            sum(status) over (
                partition by
                    course_id
                order by
                    dt,
                    status desc
            ) as course_instant_unt
        from
            (
                select
                    user_id,
                    course_id,
                    in_datetime as dt,
                    1 as status
                from
                    attend_tb
                union all
                select
                    user_id,
                    course_id,
                    out_datetime as dt,
                    -1 as status
                from
                    attend_tb
            ) t
    ) t1
    join course_tb c on t1.course_id = c.course_id
group by
    t1.course_id,
    c.course_name
order by
    t1.course_id

SQL大厂面试题 文章被收录于专栏

牛客网sql大厂面试题题解~

全部评论

相关推荐

04-28 11:34
西北大学 运营
牛客4396号:不好意思,这个照片猛一看像丁真
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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