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

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

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

-- 统计每个科目最大同时在线人数(按course_id排序)

-- 1 先用联合查询,将in_datetime标记为1,out_datetime标记为-1。将结果作为t1表
# select user_id, course_id, in_datetime dt, 1 as flag
# from attend_tb
# union all
# select user_id, course_id, out_datetime dt, -1 as flag
# from attend_tb

-- 2 利用窗口函数,求累计在线人数。结果作为t2表
# select user_id, course_id, dt,
#     sum(flag) over(partition by course_id order by dt rows between unbounded preceding and current row) cum_num
# from t1

-- 3 选择最大在线人数
# select
#     t2.course_id, course_name, max(cum_num)
# from t2 left join course_tb ct on t2.course_id=ct.course_id
# group by course_id, course_name

-- 4 汇总
select
    t2.course_id, course_name, max(cum_num)
from (
    select user_id, course_id, dt,
        sum(flag) over(partition by course_id order by dt rows between unbounded preceding and current row) cum_num
    from (
        select user_id, course_id, in_datetime dt, 1 as flag
        from attend_tb
        union all
        select user_id, course_id, out_datetime dt, -1 as flag
        from attend_tb
    )t1
)t2 left join course_tb ct on t2.course_id=ct.course_id
group by course_id, course_name

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-15 14:22
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务