我正在使用PostgreSQL编写程序,以显示循环赛中5个小组的视频游戏锦标赛排名。因此,在某些地方可能存在3方并列的情况。我找到了确定头对头获胜者的逻辑:这里,这非常有帮助,但无法解决三方并列的情况。我稍微修改了模式,所以这是我正在使用的内容:
[poolteam]
-team
-wins
[versus]
-team1
-team2
-win
对阵表只告诉我们两支队伍之间的比赛结果。然后,我将其传入新表格中以获取团队的排名。
select team, wins, RANK() OVER (ORDER BY wins desc) AS rank
INTO rankTable
from poolteam;
然后,我可以使用链接中的答案来获取排名和头对头的平局分胜负。我编写了这个程序来查找是否有超过2个队伍具有相同的排名
select rank
from finalStandings
group BY rank having count(*) >2
这个逻辑首先比较各队胜场数,然后再看两队之间的交锋情况,如果有超过2支平局队伍,则会考虑所有平局队伍之间的交锋情况。以下是一个示例:
Team A 3-1
Team B 2-2
Team C 2-2
Team D 2-2
Team E 1-3
团队A击败了B、C和E,团队B击败了C和D,团队C击败了E和D,团队D击败了E和A,团队E击败了B。
在这种情况下,三支并列的队伍(B、C、D)都赢了2场比赛,但因为B击败了所有并列的队伍,他们将取得第二名,C将获得第三名,因为他们赢得了与D的比赛。
如果三支队伍相互击败,则平局解决者会查看与并列队伍赢得的比赛,这很容易计算,只有这种情况我需要帮助处理。