题解 | #牛客直播各科目同时在线人数#
牛客直播各科目同时在线人数
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