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

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

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

相关推荐

一天代码十万三:这都不能算简历吧
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务