postgresql - 使用null排除任何结果

时间:2012-03-12 19:16:59

标签: sql postgresql

我正在做一堆求和查询:SELECT col1 + col2 + col3 + ...

某些列中的某些值为null。我正在通过

来检查它们
SELECT CASE WHEN col1 is not null and col2 is not null and ...

我想知道是否有更简洁的语法来完成此任务。

3 个答案:

答案 0 :(得分:7)

好吧,自the sum of any number and null is null以来,您可以执行以下操作(填写明显的...):

select big_honking_sum
from(
    select col1+col2+col3+...+coln as big_honking_sum
    from some_table
)sum
where big_honking_sum is not null;

答案 1 :(得分:3)

如果您可以接受将NULL值视为0,请使用COALESCE函数。

SELECT COALESCE(Col1,0)
      + COALESCE(Col2,0)
      + COALESCE(Col3,0)
      AS TOTAL FROM table;

如果适用,也许你可以考虑使用0作为默认值而不是NULL。

答案 2 :(得分:1)

你可以更简单:

SELECT foo
FROM   ...
WHERE  (-1 IN (col1, col2, col3)) IS NOT NULL

如果(并且仅当)测试值中至少有一个NULL值(并且不匹配),则IN表达式将返回NULL。因此,如果(且仅当)没有NULL,则整个表达式的计算结果为TRUE。

编辑:我必须纠正自己!正匹配将停止评估并返回TRUE,即使值中包含NULL也是如此。所以你需要一个保证不在集合中的值。像0那样所有值都是> 0或-1,其中所有值都是正数,或者您不能将此表达式用于此目的。