Postgresql получает общее количество матчей по игроку

У меня есть следующий запрос 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?

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

1 ответ

Вы можете достичь этого с помощью предложения группы:

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
;
Другие вопросы по тегам