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



在PostgreSQL中,如果组中只有一个成员的值为null,则聚合函数sum((返回null:SELECT sum(null::integer);给出null。如果组中有多个补遗,并且其中至少一个补遗不为null,则剩余值为null的补遗将转换为0,然后将所有补遗相加。所以组的和(null,null,3,0,1(返回4,而不是nullSELECT null::integer + null::integer + 3 + 0 + 1;确实如此。当组中至少有一个附录为null时,是否有方法使函数sum返回null?这将与操作员+行为相一致,并对我的情况有所帮助。

您可以使用预期行为创建自己的聚合:

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 中查看测试结果

最新更新