如何使用 COUNT 计算两列中出现的次数?
How to use COUNT to calculate number of occurence in two columns?
我有两个 table。
Table 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)
Table 2:Consist 双方对战,column1 包含获胜者的名字,column2 是失败者的名字。所以这意味着双方都参加了那场比赛。
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)
但是我无法理解如何计算每个玩家参加的比赛次数的逻辑?
从上面的比赛table我们可以看到每个球员都打了一次,但我不能在 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
需要一个简单的嵌套子查询,如下:
SELECT pl.id,
(
SELECT COUNT(id)
FROM Matches
WHERE winner = pl.id OR loser = pl.id
) AS matches
FROM Players pl
我有两个 table。
Table 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)
Table 2:Consist 双方对战,column1 包含获胜者的名字,column2 是失败者的名字。所以这意味着双方都参加了那场比赛。
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)
但是我无法理解如何计算每个玩家参加的比赛次数的逻辑?
从上面的比赛table我们可以看到每个球员都打了一次,但我不能在 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
需要一个简单的嵌套子查询,如下:
SELECT pl.id,
(
SELECT COUNT(id)
FROM Matches
WHERE winner = pl.id OR loser = pl.id
) AS matches
FROM Players pl