问题陈述-用户可以具有任意数量的通知。需要计算他拥有的通知数量并使用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 | |
| +----------------+---------------+------------------+-----------------+ |
+-------------------------------------------------------------------------+
答案 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