【京东】使用 LATERAL JOIN 查询战队最近 3 场比赛表现
JOIN 连接窗口函数CASE WHEN用户行为分析面试真题
题目描述
来源:京东 SQL 面试真题
某电竞数据分析平台记录了各支职业战队的比赛数据。平台需要快速查询每支战队的近期比赛表现,供赛事解说和数据分析师使用。
数据表
esports_teams 电竞战队表
| 字段 | 类型 | 说明 |
|---|---|---|
| team_id | INT | 战队编号,主键 |
| team_name | VARCHAR(50) | 战队名称 |
| region | VARCHAR(20) | 所属赛区 |
| game_type | VARCHAR(30) | 参赛游戏类型 |
match_records 比赛记录表
| 字段 | 类型 | 说明 |
|---|---|---|
| match_id | INT | 比赛编号,主键 |
| team_id | INT | 战队编号,关联 esports_teams.team_id |
| match_date | DATE | 比赛日期 |
| opponent | VARCHAR(50) | 对手战队名称 |
| kills | INT | 本队总击杀数,保证 ≥ 1 |
| deaths | INT | 本队总死亡数,保证 ≥ 1 |
| is_win | TINYINT | 是否获胜:1 = 胜,0 = 负 |
问题
请使用 LATERAL JOIN 查询每支战队最近 3 场比赛的记录。
输出以下字段:
| 字段 | 说明 |
|---|---|
| team_name | 战队名称 |
| region | 所属赛区 |
| match_date | 比赛日期 |
| opponent | 对手战队名称 |
| kills | 击杀数 |
| deaths | 死亡数 |
| kda_ratio | KDA 比值,即 kills / deaths,四舍五入保留 2 位小数 |
| result | 比赛结果,获胜显示“胜”,失败显示“负” |
排序规则
结果按 team_id 升序排列;同一战队内按 match_date 降序排列,若日期相同则按 match_id 升序排列。
比赛不足 3 场的战队显示其全部比赛记录;没有比赛记录的战队不输出。
数据样例
| team_idPKINT | team_nameVARCHAR(50) | regionVARCHAR(20) | game_typeVARCHAR(30) |
|---|---|---|---|
| 1 | 星火战队 | LPL | 英雄联盟 |
| 2 | 远航战队 | LCK | 英雄联盟 |
| 3 | 极光战队 | LEC | 英雄联盟 |
| 4 | 赤焰战队 | LPL | 英雄联盟 |
输入数据显示 4 / 4 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里