题解 | #牛客直播各科目同时在线人数#
牛客直播各科目同时在线人数
https://www.nowcoder.com/practice/d69677e41f9a4bf3b3ed7a42573e9490
with attendList as ( select course_id, course_name, in_datetime as time, 1 as uv from course_tb join attend_tb using (course_id) union all select course_id, course_name, out_datetime as time, -1 as uv from course_tb join attend_tb using (course_id) ) #将用户的进入时间的次数为1,用户离开直播的时间次数为-1,一个用户同一天可能会有多次进出动作,所以需要将进吃时间绑定course_id,course_name,如没有选择user_id必须用union all 连接 select course_id, course_name, max(rankingnum) from ( select course_id, course_name, time, uv, sum(uv)over(partition by course_id order by time asc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW #这段关键词可以不加,这段代表从结果集第一行到当前行的范围,也就是over()函数的默认模式 ) as rankingnum from attendList ) t1 group by course_id, course_name
本题难度不高,只需要将进出直播的时间通过unoin all连接即可,唯一难点在于sum()over()聚合函数,之前已有相似例题所以不多赘述。