此题共包含两张表:

表1:course_tb

表2:attend_tb

要解决的问题:

请你统计每个科目最大同时在线人数(按course_id排序)

解题思路:

  1. 首先将in_datetime和out_datetime放到一列,然后按时间排序,其中将in_datetime添加辅助列1,将out_datetime添加辅助列-1
  2. 按科目类型排序,计算出每科最多达的在线人数
  3. 按course_id排序
SELECT course_id, course_name, max(assist) max_num
from(
    SELECT course_id, time,
    sum(ass) over(PARTITION by course_id ORDER BY time) assist
    from(
      SELECT course_id, in_datetime time, 1 ass
      from attend_tb
      union all
      SELECT course_id, out_datetime time, -1 ass
      from attend_tb
      ORDER BY time	
    ) temp
	)t1
left join course_tb using(course_id)
GROUP BY course_id,course_name
ORDER BY course_id