如果至少有一个附录为 NULL,则使 PostgreSQL 聚合函数 sum() return NULL

Make PostgreSQL aggregate function sum() return NULL if at least one of the addendum is NULL

在 PostgreSQL 聚合函数 sum() 中 return如果组中只有一个成员值为 null,则为 null: SELECT sum(null::integer); 给出空值。如果组内有多个补码,且至少有一个补码不为空,则将剩余值为空的补码转换为0,然后对所有补码求和。所以组的总和 (null, null, 3, 0, 1) returns 4, not null as SELECT null::integer + null::integer + 3 + 0 + 1; 确实如此。 当 group 中至少有一个 addendum 为 null 时,有没有办法使函数 sum return null?它与 operator+ 行为一致并且对我的情况有帮助。

您可以创建具有预期行为的自己的聚合:

CREATE OR REPLACE FUNCTION sum_null(x anyelement, y anyelement)
RETURNS anyelement LANGUAGE sql AS $$
SELECT x + y ; $$ ;

CREATE OR REPLACE AGGREGATE sum_null(x anyelement)
( SFUNC = sum_null, STYPE = anyelement, INITCOND = 0) ;

测试结果见dbfiddle