我无法让 COUNT(*)=0 显示在列中。这个问题已经在某种程度上得到了解决:如何使这个查询也返回计数值为 0 的行?
...但我无法将解决方案推广到多个不同的类别。这是我的情况:我有 11 个不同类别的停车位置和 4 个不同的附属类别:
# 从受访者中选择不同的停车位置;
停车位
------------------
街头免费
城市车库
UC地段
rpp 访问者
街外免费
其他
无处
其他付费
仪表
禁用
rpp
(11 行)
# 从受访者中选择不同的隶属关系;
联系
-------------
学院
本科
毕业
职员
(4 行)
我的本科生受访者都没有使用残疾人停车位,所以当我尝试按parking_location计算它们时,我只得到10行:
SELECT park_location,COUNT(*) FROM 受访者 WHERE affiliation='undergrad' GROUP BY park_location;
停车位 | 数数
------------------+--------
街头免费| 2
仪表 | 25
城市车库 | 5
rpp | 21
无处| 1012
UC 很多 | 33
rpp 访问者 | 10
街外免费| 10
其他| 10
其他付费 | 12
(10 行)
没问题。上述链接显示了如何使 0 出现:
ths=# WITH c as (SELECT DISTINCT park_location FROM 受访者),
ths-# r AS (SELECT affiliation, park_location, COUNT(*) AS count FROM 受访者 WHERE affiliation='undergrad' GROUP BY 1,2)
ths-# SELECT c.parking_location, COALESCE(r.count, 0) AS count FROM c
ths-# LEFT JOIN r ON c.parking_location = r.parking_location
ths-# ORDER BY park_location;
停车位 | 数数
------------------+--------
无处| 1012
仪表 | 25
rpp | 21
rpp 访问者 | 10
街头免费| 2
UC 很多 | 33
街外免费| 10
城市车库 | 5
其他付费 | 12
残疾人| 0
其他| 10
(11 行)
但现在我想展示所有从属关系的表格,而不仅仅是本科生。此外,我想先按从属关系订购结果表,然后按parking_location。我以为我可以删除上面的 WHERE 子句,但后来我的本科禁用列消失了:
ths=# WITH c as (SELECT DISTINCT park_location FROM 受访者),
ths-# r AS (SELECT affiliation,parking_location, COUNT(*) AS count FROM respondent GROUP BY affiliation,parking_location)
ths-# SELECT r.affiliation, c.parking_location, COALESCE(r.count, 0) FROM c
ths-# LEFT JOIN r ON c.parking_location = r.parking_location
ths-# ORDER BY affiliation,parking_location;
隶属关系 | 停车位 | 合并
-------------+------+----------
员工 | 城市车库 | 34
员工 | 其他付费 | 50
员工 | 残疾人| 18
员工 | 其他| 61
本科 | 无处| 1012
本科 | 仪表 | 25
本科 | rpp | 21
本科 | rpp 访问者 | 10
本科 | 街头免费| 2
本科 | UC 很多 | 33
本科 | 街外免费| 10
本科 | 城市车库 | 5
本科 | 其他付费 | 12
本科 | 其他| 10
毕业 | 无处| 1113
毕业 | 仪表 | 96
毕业 | rpp | 31
有什么帮助吗?