PostgreSQL | Объединить результаты запросов - PullRequest
1 голос
/ 02 августа 2020

У меня здесь "простая" ситуация, но я не мог решить ее самостоятельно. Так что мне нужно объединить один результат первого запроса со вторым, чтобы получить «окончательный результат».

Первый запрос получает количество выстрелов, сделанных игроком.

SELECT player, COUNT(shot) shots FROM table1 GROUP BY player;
+---------+-------+
| player  | shots |
+---------+-------+
| player1 | 10    |
+---------+-------+
| player2 | 10    |
+---------+-------+

Во-вторых, чтобы получить попадания.

SELECT player, COUNT(hit) hits FROM table2 GROUP BY player;
+---------+-------+
| player  | hits  |
+---------+-------+
| player1 | 10    |
+---------+-------+
| player2 | 5     |
+---------+-------+

И мне нужно рассчитать точность (попадания / выстрелы * 100), отображая результат примерно так.

+---------+-------+------+-----+
| player  | shots | hits | acc |
+---------+-------+------+-----+
| player1 | 10    | 10   | 100 |
+---------+-------+------+-----+
| player2 | 10    | 5    | 50  |
+---------+-------+------+-----+

1 Ответ

2 голосов
/ 02 августа 2020

Вы можете использовать join после агрегирования:

SELECT player, s.shots, h.hits
FROM (SELECT player, COUNT(shot) as shots
      FROM table1
      GROUP BY player
     ) s JOIN
     (SELECT player, COUNT(hit) as hits
      FROM table2
      GROUP BY player
     ) h
     USING (player);

Вы действительно намереваетесь COUNT()? Кажется, что SUM() было бы более подходящим.

Кроме того, это возвращает только игроков за обеими столами. Если вы хотите, чтобы игроки играли за любым столом, используйте FULL JOIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...