我正在尝试计算返回的总行数,另外我想计算布尔条件出现的次数。例如:
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
我在这里所做的是利用 的缺失ELSE
子句CASE
来默认一个NULL
值 - 该值不被计算在内。注意:上面的查询只是示例,真正的查询在 select、join、group by 和 order by 子句上有附加字段。
语法COUNT(CASE ...
相当复杂,有没有更简洁的方式来表达相同的概念?
您可以使用
SUM
代替COUNT
:或者更恰当地说
FILTER
: