OPPO · 排序 · 算法编程题
OPPO 排序 时限 1 秒 / 256 MB

题目描述

现有某天短视频直播间用户观看直播间的信息表user_view_tb如下,
(其中字段包含用户id:user_id、直播间id:room_id、 进入时间:in_time,离开时间:out_time)
user_id
room_id
in_time
out_time
1
1001
10:00:00
10:30:00
2
1001
10:01:00
10:05:00
3
1001
10:05:00
10:20:00
1
1002
19:05:00
20:05:00
2
1002
19:15:00
19:55:00
2
1002
20:15:00
20:45:00
3
1002
20:15:00
20:45:00
4
1003
22:15:00
23:15:00
1
1002
23:15:00
23:45:00
4
1002
23:10:00
23:25:00
3
1002
23:00:00
23:35:00
4
1001
23:10:00
23:25:00
3
1001
23:00:00
23:35:00
4
1003
23:10:00
23:15:00
1
1001
20:10:00
20:15:00
1
1001
20:00:00
23:35:00
有直播间信息表room_info_tb如下:
room_id
room_name
room_type
1001
娱乐大王牌
娱乐
1002
声家班
搞笑
1003
嗨嗨嗨
搞笑
请你统计晚上11-12点之间各直播间的在线人数(包含边界值11:00、12:00),并按在线人数降序排序,以上例子输出结果如下:
room_id
room_name
user_count
1001
娱乐大王牌
3
1002
声家班
3
1003
嗨嗨嗨
1

样例共 1 组

样例 1
输入
drop table if exists user_view_tb;
CREATE TABLE user_view_tb(
user_id int(10) NOT NULL,
room_id int(10) NOT NULL,
in_time time NOT NULL,
out_time time NOT NULL
);
INSERT INTO user_view_tb VALUES(1, 1001, '10:00:00', '10:30:00');
INSERT INTO user_view_tb VALUES(2, 1001, '10:01:00', '10:05:00');
INSERT INTO user_view_tb VALUES(3, 1001, '10:05:00', '10:20:00');
INSERT INTO user_view_tb VALUES(1, 1002, '19:05:00', '20:05:00');
INSERT INTO user_view_tb VALUES(2, 1002, '19:15:00', '19:55:00');
INSERT INTO user_view_tb VALUES(2, 1002, '20:15:00', '20:45:00');
INSERT INTO user_view_tb VALUES(3, 1002, '20:15:00', '20:45:00');
INSERT INTO user_view_tb VALUES(4, 1003, '22:15:00', '23:15:00');
INSERT INTO user_view_tb VALUES(1, 1002, '23:15:00', '23:45:00');
INSERT INTO user_view_tb VALUES(4, 1002, '23:10:00', '23:25:00');
INSERT INTO user_view_tb VALUES(3, 1002, '23:00:00', '23:35:00');
INSERT INTO user_view_tb VALUES(4, 1001, '23:10:00', '23:25:00');
INSERT INTO user_view_tb VALUES(3, 1001, '23:00:00', '23:35:00');
INSERT INTO user_view_tb VALUES(4, 1003, '23:10:00', '23:15:00');
INSERT INTO user_view_tb VALUES(1, 1001, '20:10:00', '20:15:00');
INSERT INTO user_view_tb VALUES(1, 1001, '20:00:00', '23:35:00');

drop table if exists room_info_tb;
CREATE TABLE room_info_tb(
room_id int(10) NOT NULL,
room_name varchar(20) NOT NULL,
room_type varchar(20) NOT NULL
);
INSERT INTO room_info_tb VALUES(1001, '娱乐大王牌', '娱乐');
INSERT INTO room_info_tb VALUES(1002, '声家班', '搞笑');
INSERT INTO room_info_tb VALUES(1003, '嗨嗨嗨', '搞笑');
输出
1001|娱乐大王牌|3
1002|声家班|3
1003|嗨嗨嗨|1

算法解析依据一般

考点:排序

限制 1 秒 / 256MB | SQL 题

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

本题是 SQL 题:给出建表语句与目标结果,要求写出查询语句。

建议步骤

  1. 先读样例里的建表语句,理清有哪几张表、每张表的字段含义与关联键。
  2. 明确输出字段与输出顺序——排序、列名、小数位数通常都是得分点。
  3. 需要「按某维度统计」时用 GROUP BY 聚合,过滤分组结果用 HAVING
  4. 需要排名或累计时用窗口函数(ROW_NUMBER()RANK()SUM() OVER)。
  5. 拿样例数据在本地跑一遍,确认输出与样例逐行一致。

易错点:排序方向写反;GROUP BY 后选了非分组字段;没做 ROUND 保留小数;空值参与聚合。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年秋招-OPPO-数据开发岗笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解