我有两张桌子。
表1:由玩家名称和ID组成。
tournament=> select * from Players;
id | name
----+--------
1 | Rahul
2 | Rohit
3 | Ramesh
4 | Roshan
5 | Ryan
6 | Romelu
7 | Roman
8 | Rampu
(8 rows)
表2:由两个互相对战的对手组成,第一栏包含获胜者的名称,第二栏包含输者的名称。因此,这意味着双方都参加了该比赛。
tournament=> select * from Matches;
id | winner | loser
----+--------+-------
1 | 1 | 2
2 | 3 | 4
3 | 5 | 6
4 | 7 | 8
(4 rows)
现在,我想计算不同玩家玩的比赛数量,通过查询以下内容来计算玩家赢得的比赛数量。
SELECT Players.id, COUNT(Matches.winner) AS Points FROM Players LEFT JOIN (SELECT * from Matches) AS Matches ON Players.id = Matches.winner GROUP by Players.id Order by Points desc, Players.id;
id | points
----+---
1 | 1
3 | 1
5 | 1
7 | 1
2 | 0
4 | 0
6 | 0
8 | 0
(8 rows)
但是我不知道如何计算每个球员的比赛次数的逻辑?
从Matches表格上方,我们可以看到每个玩家玩过一次游戏,但我无法用psql编写该游戏。
以下查询在两个单独的查询中对获胜者和失败者ID值进行计数,然后将它们UNION
汇总在一起。不用担心重复计算,因为一个团队无法与自己对抗,而只能与另一个独特的团队对抗。外部查询对团队计数求和。
SELECT t.id, COUNT(t.id) AS numMatches FROM (
SELECT winner AS id FROM Matches UNION ALL
SELECT loser AS id FROM Matches
) t GROUP BY t.id
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句