Postgresql按玩家获取总匹配数

Postgresql按玩家获取总匹配数,postgresql,aggregation,Postgresql,Aggregation,我有以下Postgres查询: SELECT p_id as player_id, name as player_name FROM Players LEFT OUTER JOIN matches ON Players.p_id = matches.player1 or Players.p_id = matches.player2 ; 它返回以下结果 player_id | player_name -----------+------------------- 1 |

我有以下Postgres查询:

SELECT p_id as player_id, name as player_name
FROM Players
LEFT OUTER JOIN matches
ON Players.p_id = matches.player1 or Players.p_id = matches.player2
;
它返回以下结果

 player_id |    player_name
-----------+-------------------
         1 | Twilight Sparkle
         1 | Twilight Sparkle
         2 | Fluttershy
         3 | Applejack
         3 | Applejack
         4 | Pinkie Pie
         5 | "Rarity
         5 | "Rarity
         6 | Rainbow Dash
         7 | Princess Celestia
         7 | Princess Celestia
         8 | Princess Luna
我怎样才能得到一个唯一的p_id表,其中包含每个p_id的名称和p_id所在的行的总数

player_id |    player_name     |  total_matches
-----------+-------------------+------
         1 | Twilight Sparkle  | 2
         2 | Fluttershy        | 1
         3 | Applejack         | 1
         4 | Pinkie Pie        | 1
         5 | "Rarity           | 2
         6 | Rainbow Dash      | 1
         7 | Princess Celestia | 2
         8 | Princess Luna     | 1

您可以使用group子句实现它:

SELECT p_id as player_id, name as player_name, count(*) as total_matches
FROM Players
LEFT OUTER JOIN matches
ON Players.p_id = matches.player1 or Players.p_id = matches.player2
GROUP BY name
;

那将抛出一个错误。您需要按玩家id分组(假设玩家id是主键)@JosephPerez
按1、2分组