首页 > 解决方案 > 找到交手次数最多的球队对

问题描述

我有一张名为 Involves 的表格:

match  |  team
10     |  A
10     |  B
20     |  B
20     |  C
30     |  C
30     |  A
40     |  D
40     |  C
50     |  A
50     |  B

'match' 列中的值是指比赛的唯一 id,而 'team' 列中的值是指球队的唯一 id。

我正在尝试编写一个查询,该查询将输出对彼此进行最多比赛的球队对。输出显示如下所示:

team1  |  team2  |  matches
A      |  B      |  2

由于 A 和 B 在两场比赛中交手过,第 10 场和第 50 场比赛。

为了解决这个问题,我认为您必须找到所有可能的团队配对组合,然后找到每对配对的比赛总数。从此结果集中,您可以选择在总比赛中具有最大值的元组。但是,我不确定如何编写这样的查询,尤其是在查找所有配对组合方面。任何见解都值得赞赏。

标签: sqlpostgresqlaggregate-functions

解决方案


就像是:

SELECT team1
     , team2
     , COUNT(*) AS matches_played
FROM (
    SELECT match
         , MIN(team) AS team1
         , MAX(team) AS team2
    FROM t
    GROUP BY match
) AS x
GROUP BY team1, team2
ORDER BY COUNT(*) DESC

(a, b)内部查询用于生成有序对,例如(a, c)(b, c)


推荐阅读