返回介绍

solution / 1800-1899 / 1841.League Statistics / README_EN

发布于 2024-06-17 01:03:14 字数 5470 浏览 0 评论 0 收藏 0

1841. League Statistics

中文文档

Description

Table: Teams

+----------------+---------+
| Column Name  | Type  |
+----------------+---------+
| team_id    | int   |
| team_name    | varchar |
+----------------+---------+
team_id is the column with unique values for this table.
Each row contains information about one team in the league.

 

Table: Matches

+-----------------+---------+
| Column Name   | Type  |
+-----------------+---------+
| home_team_id  | int   |
| away_team_id  | int   |
| home_team_goals | int   |
| away_team_goals | int   |
+-----------------+---------+
(home_team_id, away_team_id) is the primary key (combination of columns with unique values) for this table.
Each row contains information about one match.
home_team_goals is the number of goals scored by the home team.
away_team_goals is the number of goals scored by the away team.
The winner of the match is the team with the higher number of goals.

 

Write a solution to report the statistics of the league. The statistics should be built using the played matches where the winning team gets three points and the losing team gets no points. If a match ends with a draw, both teams get one point.

Each row of the result table should contain:

  • team_name - The name of the team in the Teams table.
  • matches_played - The number of matches played as either a home or away team.
  • points - The total points the team has so far.
  • goal_for - The total number of goals scored by the team across all matches.
  • goal_against - The total number of goals scored by opponent teams against this team across all matches.
  • goal_diff - The result of goal_for - goal_against.

Return the result table ordered by points in descending order. If two or more teams have the same points, order them by goal_diff in descending order. If there is still a tie, order them by team_name in lexicographical order.

The result format is in the following example.

 

Example 1:

Input: 
Teams table:
+---------+-----------+
| team_id | team_name |
+---------+-----------+
| 1     | Ajax    |
| 4     | Dortmund  |
| 6     | Arsenal   |
+---------+-----------+
Matches table:
+--------------+--------------+-----------------+-----------------+
| home_team_id | away_team_id | home_team_goals | away_team_goals |
+--------------+--------------+-----------------+-----------------+
| 1      | 4      | 0         | 1         |
| 1      | 6      | 3         | 3         |
| 4      | 1      | 5         | 2         |
| 6      | 1      | 0         | 0         |
+--------------+--------------+-----------------+-----------------+
Output: 
+-----------+----------------+--------+----------+--------------+-----------+
| team_name | matches_played | points | goal_for | goal_against | goal_diff |
+-----------+----------------+--------+----------+--------------+-----------+
| Dortmund  | 2        | 6    | 6    | 2      | 4     |
| Arsenal   | 2        | 2    | 3    | 3      | 0     |
| Ajax    | 4        | 2    | 5    | 9      | -4    |
+-----------+----------------+--------+----------+--------------+-----------+
Explanation: 
Ajax (team_id=1) played 4 matches: 2 losses and 2 draws. Total points = 0 + 0 + 1 + 1 = 2.
Dortmund (team_id=4) played 2 matches: 2 wins. Total points = 3 + 3 = 6.
Arsenal (team_id=6) played 2 matches: 2 draws. Total points = 1 + 1 = 2.
Dortmund is the first team in the table. Ajax and Arsenal have the same points, but since Arsenal has a higher goal_diff than Ajax, Arsenal comes before Ajax in the table.

Solutions

Solution 1

# 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;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文