postgresql 排除具有空值的行

acruukt9  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(3)|浏览(229)

我正在做一堆求和查询:

SELECT col1 + col2 + col3 + ...

某些列中的某些值是null。我通过以下操作检查它们:

SELECT CASE WHEN col1 is not null and col2 is not null and ...

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

r6hnlfcb

r6hnlfcb1#

好吧,因为任何数字和null的和都是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;
2wnc66cl

2wnc66cl2#

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

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

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

uqcuzwp8

uqcuzwp83#

更简单、更快、更清晰:

... WHERE (col1, col2, col3) IS NOT NULL;

当(且仅当)ROW表达式中的所有字段都是NOT NULL时,表达式返回true。请参见:

  • 为什么在检查行类型时,IS NOT NULL为false?

也可以应用于整行:

SELECT ...
FROM   my_table t
WHERE  (t.*) IS NOT NULL;

Postgres甚至有一个专门的功能:num_nulls()。在Postgres 15上的测试中稍微昂贵一些,但更清晰:

... WHERE num_nulls(col1, col2, col3) = 0;

fiddle

相关问题