SQL 刷题/【京东】生成国家赛段表现层完整矩阵
上一题下一题困难通过率 67%

【京东】生成国家赛段表现层完整矩阵

JOIN 连接聚合函数GROUP BYCASE WHENUNION面试真题

题目描述

来源:京东 SQL 面试真题

2025 年东亚区山地车锦标赛由中国(CN)、日本(JP)、韩国(KR)三国车手参加,共 3 个赛段。

组委会需要生成一张“国家 × 赛段 × 表现层”三维矩阵报表。每个组合都必须输出一行,即使该组合没有符合条件的车手,也要使用 0 填充。

数据表

t_rider 车手档案表

字段类型说明
rider_idBIGINT车手编号
rider_full_nameVARCHAR(64)车手姓名,格式为“姓 名”,中间一个空格
team_nameVARCHAR(32)所属车队
birth_dateDATE出生日期
country_codeVARCHAR(8)国家代码,仅取 CN / JP / KR

t_stage 赛段成绩表

字段类型说明
stage_idBIGINT记录编号
rider_idBIGINT车手编号,关联 t_rider.rider_id
stage_noTINYINT赛段编号,仅取 1 / 2 / 3
race_dateDATE比赛日期
finish_time_secINT完成时间(秒),DNF 时为 NULL
dnf_flagTINYINT是否中途退出,0 为完赛,1 为 DNF
time_penalty_secSMALLINT罚时(秒),无罚时为 0

表现分层

按车手在单个赛段的总用时判定:

总用时 = finish_time_sec + time_penalty_sec

仅完赛车手参与分层:

performance_tier总用时范围
gold小于等于 3500 秒
silver3501~3700 秒
bronze3701~4000 秒
  • 总用时超过 4000 秒,视为“完赛但成绩太差不评级”,不计入任何分层。
  • dnf_flag = 1 的车手不进入分层。

输出要求

输出 country_code × stage_no × performance_tier 的完整笛卡尔积,共 3 × 3 × 3 = 27 行。

字段说明
country_code国家代码
stage_no赛段编号
performance_tier表现分层
rider_cnt该组合下的车手人数
avg_finish_time_sec该组合总用时的平均值,含罚时,四舍五入保留 2 位;空组合为 0.00
max_penalty_sec该组合最大罚时;空组合为 0

排序规则

  1. country_code 升序。
  2. stage_no 升序。
  3. performance_tier 按 gold、silver、bronze 的固定顺序。
  4. 前三项相同时,按 rider_cnt 降序。

数据样例

当前运行环境
rider_idPKBIGINTrider_full_nameVARCHAR(64)team_nameVARCHAR(32)birth_dateDATEcountry_codeVARCHAR(8)
101Li WeiDragon Trail1994-03-12CN
102Zhang MinDragon Trail1996-07-21CN
103Chen HaoPeak Riders1992-11-08CN
201Sato KenFuji Wheels1993-04-18JP
202Tanaka MeiFuji Wheels1997-09-05JP
203Ito RenSakura Racing1995-01-30JP
301Kim MinSeoul Climb1994-06-14KR
302Park JunHan River1991-12-02KR
输入数据显示 8 / 8
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

运行你的 SQL 查询后,结果将显示在这里