From 3d22c2f472303127206e8646ec9c400219fefc36 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Thu, 29 Jun 2023 08:45:31 +0800 Subject: [PATCH 1/2] feat: add sql solution to lc problem: No.1194 No.1194.Tournament Winners --- .../1194.Tournament Winners/README.md | 32 ++++++++++++++++++- .../1194.Tournament Winners/README_EN.md | 32 ++++++++++++++++++- .../1194.Tournament Winners/Solution.sql | 31 ++++++++++++++++++ 3 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 solution/1100-1199/1194.Tournament Winners/Solution.sql diff --git a/solution/1100-1199/1194.Tournament Winners/README.md b/solution/1100-1199/1194.Tournament Winners/README.md index a4f744b69c685..7f2fde11f7a24 100644 --- a/solution/1100-1199/1194.Tournament Winners/README.md +++ b/solution/1100-1199/1194.Tournament Winners/README.md @@ -95,7 +95,37 @@ Players 表: ### **SQL** ```sql - +# Write your MySQL query statement below +WITH + s AS ( + SELECT first_player AS player_id, first_score AS score, group_id + FROM + Matches AS m + JOIN Players AS p ON m.first_player = p.player_id + UNION ALL + SELECT second_player AS player_id, second_score AS score, group_id + FROM + Matches AS m + JOIN Players AS p ON m.second_player = p.player_id + ), + t AS ( + SELECT group_id, player_id, sum(score) AS scores + FROM s + GROUP BY player_id + ), + p AS ( + SELECT + group_id, + player_id, + rank() OVER ( + PARTITION BY group_id + ORDER BY scores DESC, player_id + ) AS rk + FROM t + ) +SELECT group_id, player_id +FROM p +WHERE rk = 1; ``` diff --git a/solution/1100-1199/1194.Tournament Winners/README_EN.md b/solution/1100-1199/1194.Tournament Winners/README_EN.md index dc76a9dec7096..d4313662df3b3 100644 --- a/solution/1100-1199/1194.Tournament Winners/README_EN.md +++ b/solution/1100-1199/1194.Tournament Winners/README_EN.md @@ -91,7 +91,37 @@ Matches table: ### **SQL** ```sql - +# Write your MySQL query statement below +WITH + s AS ( + SELECT first_player AS player_id, first_score AS score, group_id + FROM + Matches AS m + JOIN Players AS p ON m.first_player = p.player_id + UNION ALL + SELECT second_player AS player_id, second_score AS score, group_id + FROM + Matches AS m + JOIN Players AS p ON m.second_player = p.player_id + ), + t AS ( + SELECT group_id, player_id, sum(score) AS scores + FROM s + GROUP BY player_id + ), + p AS ( + SELECT + group_id, + player_id, + rank() OVER ( + PARTITION BY group_id + ORDER BY scores DESC, player_id + ) AS rk + FROM t + ) +SELECT group_id, player_id +FROM p +WHERE rk = 1; ``` diff --git a/solution/1100-1199/1194.Tournament Winners/Solution.sql b/solution/1100-1199/1194.Tournament Winners/Solution.sql new file mode 100644 index 0000000000000..53543b93e00e6 --- /dev/null +++ b/solution/1100-1199/1194.Tournament Winners/Solution.sql @@ -0,0 +1,31 @@ +# Write your MySQL query statement below +WITH + s AS ( + SELECT first_player AS player_id, first_score AS score, group_id + FROM + Matches AS m + JOIN Players AS p ON m.first_player = p.player_id + UNION ALL + SELECT second_player AS player_id, second_score AS score, group_id + FROM + Matches AS m + JOIN Players AS p ON m.second_player = p.player_id + ), + t AS ( + SELECT group_id, player_id, sum(score) AS scores + FROM s + GROUP BY player_id + ), + p AS ( + SELECT + group_id, + player_id, + rank() OVER ( + PARTITION BY group_id + ORDER BY scores DESC, player_id + ) AS rk + FROM t + ) +SELECT group_id, player_id +FROM p +WHERE rk = 1; From 06eadd6149bed1e27da403a591dee6726cc7b74e Mon Sep 17 00:00:00 2001 From: yanglbme Date: Thu, 29 Jun 2023 09:23:50 +0800 Subject: [PATCH 2/2] feat: add sql solution to lc problem: No.1841 No.1841.League Statistics --- .../1841.League Statistics/README.md | 38 ++++++++++++++++++- .../1841.League Statistics/README_EN.md | 38 ++++++++++++++++++- .../1841.League Statistics/Solution.sql | 37 ++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 solution/1800-1899/1841.League Statistics/Solution.sql diff --git a/solution/1800-1899/1841.League Statistics/README.md b/solution/1800-1899/1841.League Statistics/README.md index 82730381b79a0..415c1f16576f2 100644 --- a/solution/1800-1899/1841.League Statistics/README.md +++ b/solution/1800-1899/1841.League Statistics/README.md @@ -106,7 +106,43 @@ Dortmund 是积分榜上的第一支球队. Ajax和Arsenal 有同样的分数, ```sql - +# Write your MySQL query statement below +WITH + Scores AS ( + SELECT + home_team_id AS team_id, + CASE + WHEN home_team_goals > away_team_goals THEN 3 + WHEN home_team_goals < away_team_goals THEN 0 + ELSE 1 + END AS score, + home_team_goals AS goals, + away_team_goals AS away_goals + FROM Matches + UNION ALL + SELECT + away_team_id AS team_id, + CASE + WHEN home_team_goals > away_team_goals THEN 0 + WHEN home_team_goals < away_team_goals THEN 3 + ELSE 1 + END AS score, + away_team_goals AS goals, + home_team_goals AS away_goals + FROM Matches + ) +SELECT + team_name, + count(1) AS matches_played, + sum(score) AS points, + sum(goals) AS goal_for, + sum(away_goals) AS goal_against, + (sum(goals) - sum(away_goals)) AS goal_diff +FROM + Scores AS s + JOIN Teams AS t ON s.team_id = t.team_id +GROUP BY s.team_id +ORDER BY points DESC, goal_diff DESC, team_name; ``` diff --git a/solution/1800-1899/1841.League Statistics/README_EN.md b/solution/1800-1899/1841.League Statistics/README_EN.md index 3494e31c613fc..496348a46b346 100644 --- a/solution/1800-1899/1841.League Statistics/README_EN.md +++ b/solution/1800-1899/1841.League Statistics/README_EN.md @@ -100,7 +100,43 @@ Dortmund is the first team in the table. Ajax and Arsenal have the same points, ### **SQL** ```sql - +# Write your MySQL query statement below +WITH + Scores AS ( + SELECT + home_team_id AS team_id, + CASE + WHEN home_team_goals > away_team_goals THEN 3 + WHEN home_team_goals < away_team_goals THEN 0 + ELSE 1 + END AS score, + home_team_goals AS goals, + away_team_goals AS away_goals + FROM Matches + UNION ALL + SELECT + away_team_id AS team_id, + CASE + WHEN home_team_goals > away_team_goals THEN 0 + WHEN home_team_goals < away_team_goals THEN 3 + ELSE 1 + END AS score, + away_team_goals AS goals, + home_team_goals AS away_goals + FROM Matches + ) +SELECT + team_name, + count(1) AS matches_played, + sum(score) AS points, + sum(goals) AS goal_for, + sum(away_goals) AS goal_against, + (sum(goals) - sum(away_goals)) AS goal_diff +FROM + Scores AS s + JOIN Teams AS t ON s.team_id = t.team_id +GROUP BY s.team_id +ORDER BY points DESC, goal_diff DESC, team_name; ``` diff --git a/solution/1800-1899/1841.League Statistics/Solution.sql b/solution/1800-1899/1841.League Statistics/Solution.sql new file mode 100644 index 0000000000000..54870eb43d859 --- /dev/null +++ b/solution/1800-1899/1841.League Statistics/Solution.sql @@ -0,0 +1,37 @@ +# Write your MySQL query statement below +WITH + Scores AS ( + SELECT + home_team_id AS team_id, + CASE + WHEN home_team_goals > away_team_goals THEN 3 + WHEN home_team_goals < away_team_goals THEN 0 + ELSE 1 + END AS score, + home_team_goals AS goals, + away_team_goals AS away_goals + FROM Matches + UNION ALL + SELECT + away_team_id AS team_id, + CASE + WHEN home_team_goals > away_team_goals THEN 0 + WHEN home_team_goals < away_team_goals THEN 3 + ELSE 1 + END AS score, + away_team_goals AS goals, + home_team_goals AS away_goals + FROM Matches + ) +SELECT + team_name, + count(1) AS matches_played, + sum(score) AS points, + sum(goals) AS goal_for, + sum(away_goals) AS goal_against, + (sum(goals) - sum(away_goals)) AS goal_diff +FROM + Scores AS s + JOIN Teams AS t ON s.team_id = t.team_id +GROUP BY s.team_id +ORDER BY points DESC, goal_diff DESC, team_name;