这道题目要求我们统计在晚上特定时间段里各个直播间的在线人数,我们要做的事情如下:
1. 确定总体问题
我们需要统计在晚上11点到12点之间,各个直播间的在线人数,并按在线人数降序排序。
2. 分析关键问题
- 连接表:将
user_view_tb
和room_info_tb
表连接起来,以便获取每个直播间的名称。 - 筛选时间段:筛选出在晚上11点到12点之间在线的用户。
- 计算独立用户数:对每个直播间的独立用户数进行计数。
- 排序输出:按在线人数降序排序。
3. 解决每个关键问题的代码及讲解
步骤1:连接表
我们使用JOIN
将user_view_tb
和room_info_tb
表连接起来:
FROM
user_view_tb u
JOIN
room_info_tb r ON u.room_id = r.room_id
JOIN room_info_tb r ON u.room_id = r.room_id
:通过直播间ID连接两个表,以便获取每个直播间的名称。
步骤2:筛选时间段
我们使用WHERE
子句筛选出在晚上11点到12点之间在线的用户:
WHERE
u.in_time <= '23:59:59' AND u.out_time >= '23:00:00'
u.in_time <= '23:59:59' AND u.out_time >= '23:00:00'
:筛选出在指定时间段内在线的用户。
步骤3:计算独立用户数
我们使用COUNT(DISTINCT u.user_id)
对每个直播间的独立用户数进行计数:
SELECT
u.room_id,
r.room_name,
COUNT(DISTINCT u.user_id) AS user_count
COUNT(DISTINCT u.user_id) AS user_count
:计算每个直播间的独立在线用户数,DISTINCT
去重。
步骤4:排序输出
我们使用ORDER BY
按在线人数降序排序输出结果:
ORDER BY
user_count DESC
完整代码
SELECT
u.room_id,
r.room_name,
COUNT(DISTINCT u.user_id) AS user_count
FROM
user_view_tb u
JOIN
room_info_tb r ON u.room_id = r.room_id
WHERE
u.in_time <= '23:59:59' AND u.out_time >= '23:00:00'
GROUP BY
u.room_id, r.room_name
ORDER BY
user_count DESC;