我无法让 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
有什么帮助吗?