我正在做一堆求和查询:SELECT col1 + col2 + col3 + ...
某些列中的某些值为null。我正在通过
来检查它们SELECT CASE WHEN col1 is not null and col2 is not null and ...
我想知道是否有更简洁的语法来完成此任务。
答案 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,其中所有值都是正数,或者您不能将此表达式用于此目的。