现有用户观看记录表play_record_tb(uid 用户ID, cid 课程ID, start_time 开始观看时间, end_time 结束观看时间, score 用户评分),示例数据如下:

请统计每个视频某一时刻的播放量峰值,输出峰值top3高的视频信息。结果按峰值由高到低排序,保留3位小数。示例输出如下:

解释:课程9001在2022-01-01 08:31:00这个时刻有序号1和4的记录正在播放,峰值为2; 课程9002在2022-01-05 08:31:00这个时刻有序号7和8的记录正在播放,峰值为2; 课程9003在2022-01-04 08:31:00这个时刻有序号5的记录正在播放,峰值为1;
drop table if exists play_record_tb;
CREATE TABLE play_record_tb (
id INT auto_increment PRIMARY KEY,
uid INT NOT NULL COMMENT "用户ID",
cid INT NOT NULL COMMENT "课程ID",
start_time datetime COMMENT "开始观看时间",
end_time datetime COMMENT "结束观看时间",
score TINYINT COMMENT "用户评分"
)ENGINE=innodb DEFAULT CHARSET=utf8;
INSERT INTO play_record_tb(uid, cid, start_time, end_time, score) VALUES
(1001, 9001, '2022-01-01 08:30:00', '2022-01-01 09:00:00', 5)
,(1001, 9002, '2022-01-02 08:30:00', '2022-01-02 09:01:00', 4)
,(1001, 9001, '2022-01-03 09:30:00', '2022-01-03 10:20:00', 5)
,(1002, 9001, '2022-01-01 08:30:00', '2022-01-01 09:00:00', 3)
,(1001, 9003, '2022-01-04 08:30:10', '2022-01-04 08:51:09', 5)
,(1002, 9002, '2022-01-11 08:30:00', '2022-01-11 08:31:01', 5)
,(1001, 9002, '2022-01-05 08:30:00', '2022-01-05 08:54:01', 2)
,(1003, 9002, '2022-01-05 08:30:00', '2022-01-05 08:51:01', 3)
,(1003, 9004, '2022-01-06 08:30:00', '2022-01-06 08:41:01', 3)
;9001|2.000 9002|2.000 9003|1.000
考点:SQL 查询
限制 1 秒 / 256MB | SQL 题
本题是 SQL 题:给出建表语句与目标结果,要求写出查询语句。
建议步骤
GROUP BY 聚合,过滤分组结果用 HAVING。ROW_NUMBER()、RANK()、SUM() OVER)。易错点:排序方向写反;GROUP BY 后选了非分组字段;没做 ROUND 保留小数;空值参与聚合。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2023年秋招-京东-技术通用岗位-第八批笔试。