首页 > 解决方案 > 按字典顺序选择团队配对及其相对表现之间的匹配

问题描述

我们得到一个名为 football_tournaments 的数据表。该表包含以下列:

  1. 主队
  2. 客队
  3. home_score(主队进球数)
  4. away_score(客队进球数)

我们需要编写 Select SQL 查询以按字典顺序打印数据集中存在的所有团队对。我们需要输出包含球队的名称、他们之间的比赛以及该对中第一支球队的胜率。

我无法编写 SQL 查询来配对这些团队。

假设输出应如下所示:

澳大利亚 英国 31%

英格兰 威尔士 58% .....等

标签: mysqlsql

解决方案


基本上,您需要对数据进行规范化,以便团队处于相同的顺序。在 MySQL 中,您可以使用least()and来执行此操作greatest()。然后,只需聚合:

select team1, team2, count(*) as num_games, avg(is_win) as win_ratio
from (select least(home_team, away_team) as team1,
             greatest(home_team, away_team) as team2,
             (case when home_score > away_score and
                        home_team = least(home_team, away_team)
                   then 1
                   when away_score > home_score and
                        away_team = least(home_team, away_team)
                   then 1
                   else 0
              end) as is_win
      from t
     ) t
group by team1, team2;

推荐阅读