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

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

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

经典题做个标记

思路:

1.有in_datetime的时间说明有用户入场 为其标记为1

2.有out_datetime的时间说明有用户离场 为其标记为-1

3.将上述数据union起来后,使用窗口函数根据course_id进行分区,按照时间进行排序

4.最终取出最大值即为同时在线的人数

with t as (select 
    user_id,
    course_id,
    in_datetime dt,
    1 as ct
from attend_tb
union 
select 
    user_id,
    course_id,
    out_datetime dt,
    -1 as ct
from attend_tb)

select 
    course_id,
    course_name,
    max(sum_ct)
from 
(select 
    t.course_id,
    c.course_name,
    dt,
    sum(ct) over(partition by course_id order by dt) sum_ct
from t
join course_tb c
on t.course_id = c.course_id) tt
group by course_id,course_name
order by course_id
全部评论
你好,请教一下,这里的dt和开窗函数的关系是什么,这里我不理解sum是怎么运作的,同一时刻和开窗函数里面order by dt的关系不懂
点赞 回复 分享
发布于 2022-06-28 17:42

相关推荐

2024-11-21 23:29
已编辑
湖南涉外经济学院 前端工程师
点赞 评论 收藏
分享
2024-12-10 19:11
重庆大学 Java
August_Li:主管面要是真挂了,你黑化更彻底😂
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务