题解 | #牛客直播各科目出勤率#

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

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

第一步,得到每个时间在线的人数,即 in_datetime就加1,out_datetime就减1,再union,注意要保留user_id字段,避免union把不同用户相同时间的数据去重(或union all也行) --表t1

第二步,用sum(diff) over(partition by course_id order by t,diff desc)计算截止到某一时间的总在线人数 --表t2

第三步,选择最大的人数max(num)

最终的sql

with t1 as(
select 
user_id,course_id,course_name, in_datetime t, 1 diff
from 
course_tb
join
attend_tb
using(course_id)
union
select 
user_id,course_id,course_name, out_datetime t, -1 diff
from 
course_tb
join
attend_tb
using(course_id)),
t2 as(select course_id,course_name,t,
sum(diff) over(partition by course_id order by t,diff desc) num
from t1 
order by course_name)

select course_id,course_name,max(num) max_num
from t2 
group by course_id,course_name
order by course_id
全部评论
计算截止每个瞬间的上线人数减去下线人数,为啥在开窗函数的时候不加上瞬间(这个时刻)的分组条件呢,而是只按照course_id分组?
点赞 回复 分享
发布于 2022-06-28 17:08

相关推荐

2024-11-29 19:51
武汉理工大学 Java
野猪不是猪🐗:自从我把自己的学校和专业改成现在这个,求职那栏就再也没人骚扰过我(乐)
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务