【背景】 某电竞数据分析平台记录了各支职业战队的比赛数据。平台需要快速查询每支战队的近期比赛表现,供赛事解说和数据分析师使用。 【表结构与字段说明】 表1:esports_teams(电竞战队表) team_id:INT,战队编号,主键 team_name:VARCHAR(50),战队名称 region:VARCHAR(20),所属赛区 game_type:VARCHAR(30),参赛游戏类型 表2: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比值(kda_ratio,即 killsdeaths,四舍五入保留2位小数)、比赛结果(result,获胜显示"胜",失败显示"负")。结果按 team_id 升序排列,同一战队内按 match_date 降序排列,若 match_date 相同则按 match_id 升序排列。若某战队比赛不足3场,则显示其全部比赛记录。 四、样例 esports_teams 表: team_id team_name region game_type 1 StarBlaze 华东赛区 MOBA 2 IceWolf 华北赛区 MOBA 3 ThunderX 华南赛区 FPS match_records 表: match_id team_id match_date opponent kills deaths is_win 101 1 2025-03-01 TeamAlpha 25 10 1 102 1 2025-03-05 TeamBeta 18 15 0 103 1 2025-03-10 TeamGamma 30 8 1 104 1 2025-03-15 TeamDelta 22 12 1 105 2 2025-03-02 TeamEpsilon 20 20 0 106 2 2025-03-08 TeamZeta 28 5 1 107 2 2025-03-12 TeamEta 15 18 0 108 3 2025-03-03 TeamTheta 35 12 1 109 3 2025-03-09 TeamIota 40 10 1 五、样例数据查询结果表 说明:StarBlaze 有4场比赛取最近3场(104、103、102);IceWolf 有3场全部显示;ThunderX 仅有2场全部显示。 team_name region match_date opponent kills deaths kda_ratio result StarBlaze 华东赛区 2025-03-15 TeamDelta 22 12 1.83 胜 StarBlaze 华东赛区 2025-03-10 TeamGamma 30 8 3.75 胜 StarBlaze 华东赛区 2025-03-05 TeamBeta 18 15 1.20 负 IceWolf 华北赛区 2025-03-12 TeamEta 15 18 0.83 负 IceWolf 华北赛区 2025-03-08 TeamZeta 28 5 5.60 胜 IceWolf 华北赛区 2025-03-02 TeamEpsilon 20 20 1.00 负 ThunderX 华南赛区 2025-03-09 TeamIota 40 10 4.00 胜 ThunderX 华南赛区 2025-03-03 TeamTheta 35 12 2.92 胜
示例1
输入
CREATE TABLE esports_teams (
team_id INT PRIMARY KEY,
team_name VARCHAR(50),
region VARCHAR(20),
game_type VARCHAR(30)
);
CREATE TABLE match_records (
match_id INT PRIMARY KEY,
team_id INT,
match_date DATE,
opponent VARCHAR(50),
kills INT,
deaths INT,
is_win TINYINT
);
INSERT INTO esports_teams VALUES
(1, 'StarBlaze', '华东赛区', 'MOBA'),
(2, 'IceWolf', '华北赛区', 'MOBA'),
(3, 'ThunderX', '华南赛区', 'FPS');
INSERT INTO match_records VALUES
(101, 1, '2025-03-01', 'TeamAlpha', 25, 10, 1),
(102, 1, '2025-03-05', 'TeamBeta', 18, 15, 0),
(103, 1, '2025-03-10', 'TeamGamma', 30, 8, 1),
(104, 1, '2025-03-15', 'TeamDelta', 22, 12, 1),
(105, 2, '2025-03-02', 'TeamEpsilon', 20, 20, 0),
(106, 2, '2025-03-08', 'TeamZeta', 28, 5, 1),
(107, 2, '2025-03-12', 'TeamEta', 15, 18, 0),
(108, 3, '2025-03-03', 'TeamTheta', 35, 12, 1),
(109, 3, '2025-03-09', 'TeamIota', 40, 10, 1);
输出
team_name|region|match_date|opponent|kills|deaths|kda_ratio|result
StarBlaze|华东赛区|2025-03-15|TeamDelta|22|12|1.83|胜
StarBlaze|华东赛区|2025-03-10|TeamGamma|30|8|3.75|胜
StarBlaze|华东赛区|2025-03-05|TeamBeta|18|15|1.20|负
IceWolf|华北赛区|2025-03-12|TeamEta|15|18|0.83|负
IceWolf|华北赛区|2025-03-08|TeamZeta|28|5|5.60|胜
IceWolf|华北赛区|2025-03-02|TeamEpsilon|20|20|1.00|负
ThunderX|华南赛区|2025-03-09|TeamIota|40|10|4.00|胜
ThunderX|华南赛区|2025-03-03|TeamTheta|35|12|2.92|胜
加载中...