Postgresql -更简单的方法来计算布尔条件的出现次数[重复]

nwsw7zdq  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(146)

此问题在此处已有答案

postgresql - sql - count of true values(11个回答)
16天前关闭
我试图计算返回的行数,另外我想计算布尔条件的出现次数。例如:

SELECT COUNT(1), COUNT(field > 42)
FROM some_table
WHERE some_other_conditions

字符串
然而,上面的查询不起作用,因为布尔条件field > 42的计算结果为false,这仍然是计数的。我可以将查询重写为这样,这确实有效:

SELECT COUNT(1), COUNT(CASE WHEN field > 42 THEN true END)
FROM some_table
WHERE some_other_conditions


我在这里所做的是利用CASE中缺少的ELSE子句来默认为NULL值-这不被计算在内。注意:上面的查询只是示例,真实的查询在select,joins,group by和order by子句上有额外的字段。
COUNT(CASE ...的语法相当复杂,有没有更简洁的方法来表达相同的概念?

0x6upsns

0x6upsns1#

可以使用SUM代替COUNT

SELECT COUNT(*), SUM((field > 42)::int)
FROM some_table
WHERE some_other_conditions

字符串
或者更适当地为FILTER

SELECT COUNT(*), COUNT(*) FILTER (WHERE field > 42)
FROM some_table
WHERE some_other_conditions

相关问题