题解 | #牛客直播各科目同时在线人数#
牛客直播各科目同时在线人数
http://www.nowcoder.com/practice/d69677e41f9a4bf3b3ed7a42573e9490
一、题目&解题步骤
题目:统计每个科目最大同时在线人数(按course_id排序)
又是一题求同时在线题。
解题思路,分三步走:
首先,取用户进入直播间,并赋值uv为1;取用户离开直播间,并赋值uv为-1;然后使用窗口函数计算直播间的瞬时用户数;最后,取各个科目直播间的瞬时最大值,并按照course_id排序。
1)取用户进入直播间,并赋值uv为1;取用户离开直播间,并赋值uv为-1
SELECT course_id,user_id,in_datetime dt,1 AS uv FROM attend_tb UNION ALL SELECT course_id,user_id,out_datetime dt,-1 AS uv FROM attend_tb;
2)使用窗口函数计算直播间的瞬时用户数
SELECT course_id,course_name,SUM(uv)OVER(PARTITION BY course_id ORDER BY dt,uv DESC) uv_cnt FROM (SELECT course_id,user_id,in_datetime dt,1 AS uv FROM attend_tb UNION ALL SELECT course_id,user_id,out_datetime dt,-1 AS uv FROM attend_tb)uv_tb JOIN course_tb USING(course_id);
3)取各个科目直播间的瞬时最大值并按照course_id排序。
SELECT course_id,course_name,MAX(uv_cnt)max_num FROM( SELECT course_id,course_name,SUM(uv)OVER(PARTITION BY course_id ORDER BY dt,uv DESC) uv_cnt FROM (SELECT course_id,user_id,in_datetime dt,1 AS uv FROM attend_tb UNION ALL SELECT course_id,user_id,out_datetime dt,-1 AS uv FROM attend_tb)uv_tb JOIN course_tb USING(course_id) )t1 GROUP BY course_id,course_name ORDER BY course_id;
SQL解题集 文章被收录于专栏
这是牛客SQL相关的解题集