PostgreSQL – 如何在此查询中显示count = 0?
发布时间:2020-12-13 15:55:39 所属栏目:百科 来源:网络整理
导读:shelter_inventory(表) gid | pav_type | yes 1 | 1 | 1 2 | 1 | 1 3 | 0 | 1 4 | 2 | 1 5 | 2 | 0 这是当前查询(不显示count = 0) SELECT pav_type,count(*) FROM shelter_inventory WHERE yes = 1 GROUP BY pav_type ORDER BY pav_type 我希望结果显示如下
shelter_inventory(表)
gid | pav_type | yes 1 | 1 | 1 2 | 1 | 1 3 | 0 | 1 4 | 2 | 1 5 | 2 | 0 这是当前查询(不显示count = 0) SELECT pav_type,count(*) FROM shelter_inventory WHERE yes = 1 GROUP BY pav_type ORDER BY pav_type 我希望结果显示如下 pav_type | count(*) 0 | 1 1 | 2 2 | 1 3 | 0 我怎么能查询这个案子?我使用PostgreSQL. 解决方法
如果您的pav_type值是顺序的,那么您可以使用
generate_series 代替外部表:
select p.pav_type,count(yes) from generate_series(0,3) as p(pav_type) left outer join shelter_inventory s on p.pav_type = s.pav_type and s.yes = 1 group by p.pav_type order by p.pav_type 这会产生: pav_type | count ----------+------- 0 | 1 1 | 2 2 | 1 3 | 0 这个: generate_series(0,3) as p(pav_type) 本质上生成一个内联表,其中包含一个名为pav_type的列和四行:0,1,2,3.您需要在连接条件(而不是WHERE)中使用s.yes = 1,因为您需要yes = 0值应在预先分组的结果集中;如果s.yes = 1在WHERE子句中,那么无论连接条件是什么,都不会计算yes = 0行. 如果你的pav_types不能很好地适应generate_series(即不是顺序或步骤顺序)而你只有少数几个,你可以加入到VALUES expression: select p.pav_type,count(yes) from (values (0),(1),(2),(3)) as p(pav_type) left outer join shelter_inventory s on p.pav_type = s.pav_type and s.yes = 1 group by p.pav_type order by p.pav_type 您需要确保在正确的位置获得所有括号. 如果你在单独的表中有pav_types,那么对该表执行LEFT OUTER JOIN而不是使用generate_series.如果您的pav_types不是顺序的,并且您有太多不明智地放入VALUES表达式,那么构建一个表来保存有效的pav_type值和LEFT OUTER JOIN. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |