在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 的外键)
说实话,我对此很迷茫。 我相信我需要:
我认为这些步骤中的每一个都将是它自己的子查询,所以这是我的最佳尝试(非常错误):
> 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;
请帮助。并且任何解释将不胜感激
答案 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