Подсчитать количество вхождений значения в столбец для объекта - PullRequest
0 голосов
/ 29 октября 2018

Постановка проблемы. Пользователи могут иметь любое количество уведомлений. Нужно посчитать количество уведомлений у него и распечатать с помощью SQL-запроса. Ниже приведен пример таблицы.

+---------------------------------+
|  primary_number | notification  |
+---------------------------------+
| ----------------+-------------- |
|  88             | mwi           |
|  88             | mwi           |
|  87             | mwion         |
|  87             | mwioff        |
|  89             | mwi           |
| (5 rows)                        |
+---------------------------------+

К вашему сведению, если вы видите таблицу, в таблице первичных чисел 88 есть два mwi-уведомления no mwion и mwioff. Следовательно, в наборе результатов он должен печатать первичное число как 88, число mwi как 2, число mwion как 0 и число mwioff как 0 с оператором выбора.

Ожидаемый результат ::

+-------------------------------------------------------------------------+
| +----------------+---------------+------------------+-----------------+ |
| | primary_number | Number_of_mwi | number of mwioff | number of mwion | |
| +----------------+---------------+------------------+-----------------+ |
| |             88 |             2 |                0 |               0 | |
| |             87 |             0 |                1 |               1 | |
| |             89 |             1 |                0 |               0 | |
| +----------------+---------------+------------------+-----------------+ |
+-------------------------------------------------------------------------+

1 Ответ

0 голосов
/ 29 октября 2018

Предложение filter PostgreSQL для агрегатных функций (в данном случае count) - всего лишь инструмент для работы:

SELECT   primary_number,
         COUNT(*) FILTER (WHERE notification = 'mwi') AS num_of_mwi,
         COUNT(*) FILTER (WHERE notification = 'mwion') AS num_of_mwion,
         COUNT(*) FILTER (WHERE notification = 'mwioff') AS num_of_mwioff
FROM     mytable
GROUP BY primary_number
...