写一个查询来找出哪支球队赢得了最多的比赛

Posted

技术标签:

【中文标题】写一个查询来找出哪支球队赢得了最多的比赛【英文标题】:Write a query to find out which team won the most games 【发布时间】:2019-05-15 03:49:38 【问题描述】:

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

我有两个关系:

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

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

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

请帮忙。任何解释将不胜感激

【问题讨论】:

请添加示例输入和预期输出 看看GROUP BYORDER BY x LIMIT 1 我们不允许使用限制,但我绝对可以查看 GROUP BY 【参考方案1】:

试试这个

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

【讨论】:

如果我错了,请纠正我,但这不包括一支球队作为客队而不是主队赢得的比赛,对吧? 是的,你是对的,我更新了查询。但重点是如何实现您想要的结果。 这对我完全有用(我刚刚删除了第 2 行 t1.id 之后的逗号)。但这比我尝试做的要简单得多。谢谢! @Kelsi027 你是对的,更新了。我很高兴能帮助你。快乐编码

以上是关于写一个查询来找出哪支球队赢得了最多的比赛的主要内容,如果未能解决你的问题,请参考以下文章

python 编写一个程序来读取mbox-short.txt并找出谁发送了最多的邮件消息。程序看起来像f

预测球队比赛成绩

从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。

使用每个独特团队获胜的顺序计数器创建列表

count()是否正确用于我的查询?

预测球队比赛成绩