一、题目&解题步骤
	题目:统计每个科目最大同时在线人数(按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;

京公网安备 11010502036488号