Postgresql按玩家获取总匹配数
我有以下Postgres查询: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 |
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分组