【美团】评选春季档连续达标的长盛剧本
JOIN 连接聚合函数GROUP BY窗口函数日期函数排行榜面试真题
题目描述
来源:美团 SQL 面试真题
某连锁剧本杀店要在 2025 春季档评选“长盛剧本”。评选标准不是总场次或总评分,而是看一个剧本能连续多少个 ISO 周每周都达标。
春季档范围为 2025-W05 到 2025-W20,即 2025-01-27 至 2025-05-18。
达标周定义
同一本剧本在某个 ISO 周内,同时满足以下三条,才算达标周:
- 该周开局数不少于 2 局。
- 该周所有局的平均评分不少于 4.50,含等号,按局级评分计算算术平均。
- 该周所有局的实际到场玩家数之和不少于 8 人。
连续达标定义
如果剧本在 N 个相邻 ISO 周内都属于达标周,则连续长度为 N。中间不能跳过任何一周。
如果同一剧本有多个并列最长的连续段,选择起始周最早的那一段。
数据表
t_script 剧本档案表
| 字段 | 类型 | 说明 |
|---|---|---|
| script_id | BIGINT | 剧本编号 |
| script_name | VARCHAR(64) | 剧本名称 |
| theme | VARCHAR(16) | 主题:guofeng / reasoning / horror / emotion / mechanism |
| difficulty | TINYINT | 官方难度 1~5 |
| base_price | DECIMAL(7,2) | 单人单场基础售价 |
t_session 开局记录表
| 字段 | 类型 | 说明 |
|---|---|---|
| session_id | BIGINT | 局编号 |
| script_id | BIGINT | 剧本编号,关联 t_script.script_id |
| dm_name | VARCHAR(32) | 主持人昵称 |
| start_time | DATETIME | 开局时间 |
| end_time | DATETIME | 散场时间 |
| actual_players | TINYINT | 实际到场玩家数 |
| rating | DECIMAL(3,2) | 该局综合评分,范围 0.00~5.00 |
输出要求
只考虑 start_time 落在 2025-01-27 00:00:00(含)至 2025-05-19 00:00:00(不含)之间的局。
ISO 周以 MySQL YEARWEEK(date, 3) 为准:周一到周日,第一周必须含周四。
对每本剧本,找出春季档内最长连续达标周段,仅输出最长连续达标周数不少于 3 的剧本。
| 字段 | 说明 |
|---|---|
| script_id | 剧本编号 |
| script_name | 剧本名称 |
| theme | 主题 |
| max_streak_weeks | 最长连续达标周数 |
| streak_start_week | 连续段起始 ISO 周,格式 YYYY-Www |
| streak_end_week | 连续段结束 ISO 周,格式 YYYY-Www |
| weeks_session_cnt | 最长连续段内所有周的开局总数 |
| weeks_avg_rating | 最长连续段内所有局的算术平均评分,保留 2 位 |
排序规则
- max_streak_weeks 降序。
- streak_start_week 升序。
- script_id 升序。
数据样例
| script_idPKBIGINT | script_nameVARCHAR(64) | themeVARCHAR(16) | difficultyTINYINT | base_priceDECIMAL(7, 2) |
|---|---|---|---|---|
| 1 | 长夜来信 | reasoning | 4 | 268 |
| 2 | 雾港沉船 | horror | 4 | 298 |
| 3 | 春山旧案 | guofeng | 3 | 228 |
| 4 | 月下机关城 | mechanism | 5 | 328 |
| 5 | 无人回声 | emotion | 2 | 198 |
输入数据显示 5 / 5 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里