2017-02-20 4 views
0

Я получил следующий Postgres запрос:Postgresql получить полные матчи игрока

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 
; 
+0

TY Я принимаю ваш ответ в течение 12 минут –

+0

Это будет сгенерировано сообщение об ошибке. Вам нужна 'group by player_id' (при условии, что' player_id' является первичным ключом) –

+0

@JosephPerez 'group by 1, 2' –

Смежные вопросы