在具有多个子类别的postgres中返回具有COUNT(*)的0值



我在获取COUNT(*)=0以显示在列中时遇到问题。这个问题已经在某种程度上得到了解决:如何使此查询也返回计数值为0的行?

但我很难将解决方案推广到多个不同的类别。这是我的情况:我有11个不同类别的停车位和4个不同的附属类别:

#从受访者中选择不同的停车位置;停车位置------------------街头免费城市车库UC批次rpp访问者街道外免费另外无处其他已付款米残废rpp(11排)#从受访者中选择不同的隶属关系;附属-------------官能本科生grad工作人员(4排)

我的本科生受访者中没有一个使用残疾人停车场,所以当我试图按停车位置计算时,我只得到10排:

选择parking_location,从隶属关系="undergrad"的受访者中计数(*)GROUP BY parking_location;parking_location|count------------------+-------街头免费|2米|25城市车库|5rpp|21无处|1012UC批次|33rpp访问者|10街头免费|10其他|10其他已付款|12(10排)

没问题。上述链接显示了如何使0出现:

ths=#WITH c as(从受访者中选择不同的停车位置),ths-#r AS(选择隶属关系,parking_location,COUNT(*)作为计数,来自隶属关系="undergrad"GROUP BY 1,2的受访者)ths-#从c中选择c.parking_location、COALESCE(r.count,0)AS countths-#LEFT JOIN r ON c.parking_location=r.parking_locationths-#ORDER BY parking_location;parking_location|count------------------+-------无处|1012米|25rpp|21rpp访问者|10街头免费|2UC批次|33街头免费|10城市车库|5其他已付款|12已禁用|0其他|10(11排)

但现在,我想展示所有附属机构的表格,而不仅仅是本科生。此外,我想先按隶属关系排序,然后按parking_location排序。我以为我可以去掉上面的WHERE子句,但后来我的本科生禁用专栏消失了:

ths=#WITH c as(从受访者中选择不同的停车位置),ths-#r AS(选择隶属关系,parking_location,计数(*)AS计数来自受访者按隶属关系分组,parkining_location)ths-#从c中选择r.affiliation、c.parking_location、COALESCE(r.count,0)ths-#LEFT JOIN r ON c.parking_location=r.parking_locationths-#ORDER BY附属,parking_location;附属| parking_location|合并-------------+------------------+----------员工|城市车库|34员工|其他带薪|50员工|残疾人|18员工|其他|61本科生|无处可去|1012地下|meter|25undergrad|rpp|21本科生|rpp访问者|10本科生|街头免费|2本科生|UC地段|33本科生|街头免费|10本科生|城市车库|5本科生|其他付费|12本科生|其他|10grad|nothing|1113grad|meter|96grad|rpp|31

有什么帮助吗?

尝试以下操作:

WITH all_parking_locations as (SELECT DISTINCT parking_location 
                               FROM respondents),
     all_affiliations as  (SELECT DISTINCT affiliation 
                           FROM respondents),
     all_counts as (SELECT affiliation, parking_location, COUNT(*) AS count 
                    FROM respondents 
                    GROUP BY affiliation, parking_location)
SELECT aa.affiliation, apl.parking_location, COALESCE(ac.count,0) as count
FROM all_affiliations aa
CROSS JOIN all_parking_locations apl
LEFT JOIN all_counts ac ON ac.affiliation = aa.affiliation
                       AND ac.parking_location = apl.parking_location
ORDER BY aa.affiliation, apl.parking_location

最新更新