SELECT
course_id,
course_name,
MAX(sum_count) AS max_num
FROM
course_tb
JOIN (
SELECT
course_id,
count,
time,
SUM(count) OVER (
PARTITION BY
course_id
ORDER BY
time
) AS sum_count
FROM
(
SELECT
user_id,
course_id,
in_datetime AS time,
1 AS count
FROM
attend_tb
UNION
SELECT
user_id,
course_id,
out_datetime AS time,
-1 AS count
FROM
attend_tb
) AS tb1
) AS tb2 USING (course_id)
GROUP BY
course_id,
course_name
ORDER BY
course_id
首先将所有的时间UNION到一个table,对于进入的直播间的时间,+1;对于离开直播间的时间 -1;
SELECT
user_id,
course_id,
in_datetime AS time,
1 AS count
FROM
attend_tb
UNION
SELECT
user_id,
course_id,
out_datetime AS time,
-1 AS count
FROM
attend_tb
现在有了一个这样的表,接下来对于这个表中的count进行一个累计求和:
SUM(count) OVER (PARTITION BY course_id ORDER BY time)
用course_id进行分组,order by时间,那我们就有了每个直播间在每个时间段的累计人数。
大概是这样的一个图。
接下来就很简单了,选择题目需要的三个变量,course_id, course_name, MAX(sum_count)用course_tb JOIN 我们刚刚创建出来的表格就行了。

京公网安备 11010502036488号