编写查询以找出哪个队赢得最多比赛

时间:2019-05-15 03:49:39

标签: mysql

在MySQL的命令行中,我试图找出哪个队赢得了最多的比赛。如果多支球队的获胜次数相同,那么我需要将所有球队连同获胜次数一起显示出来。

我有两个关系:

Team
+---------+-----------+------+----+
| name    | shortName | abbr | id |
+---------+-----------+------+----+

Game
+---------+--------------+--------------+------------+------------+
| game_id | home_team_id | away_team_id | score_home | score_away |
+---------+--------------+--------------+------------+------------+

home_team_id away_team_id 都是 Team.id 的外键)

说实话,我对此很迷茫。 我相信我需要:

  • 比较score_home和score_away以获得胜利
  • 每队获胜次数
  • 找到与最大获胜次数相关的team_id
  • 找到与该team_id对应的团队名称

我认为这些步骤中的每一个都将是它自己的子查询,所以这是我的最佳尝试(非常错误):

> SELECT t.name
  FROM (SELECT team_id
        FROM (SELECT team_id, SUM(games_won) as wins
              FROM (SELECT home_team_id as team_id, COUNT(*) as games_won                        
                    FROM Game
                    WHERE score_home > score_away

                    UNION

                    SELECT away_team_id as team_id, COUNT(*) as games_won                        
                    FROM Game
                    WHERE score_away > score_home) game
                  )
            )
      )
  INNER JOIN Team t
       ON t.id = game.team_id;

请帮助。并且任何解释将不胜感激

1 个答案:

答案 0 :(得分:0)

尝试一下

SELECT 
  t1.id                                        AS id,
  IFNULL(home_games.cnt + away_games.cnt, 0)   AS games_won
FROM team t1
LEFT JOIN(
  SELECT home_team_id, COUNT(*) AS cnt
  FROM game
  WHERE score_home > score_away
  GROUP BY home_team_id
) home_games ON home_games.home_team_id = t1.id
LEFT JOIN(
  SELECT away_team_id, COUNT(*) AS cnt
  FROM game
  WHERE score_away > score_home
  GROUP BY away_team_id
) away_games ON away_games.away_team_id = t1.id
ORDER BY games_won DESC