计算对象列中某个值的出现次数

时间:2018-10-29 06:00:24

标签: sql postgresql select count

问题陈述-用户可以具有任意数量的通知。需要计算他拥有的通知数量并使用SQL查询进行打印。下面是示例表。

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

仅供参考,如果您看到该表,则在主号码表88中有两个mwi通知no mwion no mwioff。因此,在结果集中,应使用select语句将主号码输出为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 :(得分:2)

PostgreSQL的用于聚合函数的filter子句(在这种情况下为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