题解 | #牛客直播各科目同时在线人数#
牛客直播各科目同时在线人数
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大厂面试题题解~
查看7道真题和解析