对于以下查询
SELECT sum(c)
FROM (SELECT 1 c WHERE false) t;
我认为它需要零数字的总和,因此应该返回0
. (同样,我希望,例如数组聚合函数在零元素上返回一个空数组)。
然而,它正在返回一个NULL
(使用 PostgreSQL 11)。
=> SELECT sum(c) FROM (SELECT 1 c WHERE false) t;
sum
-----
(1 row)
这在逻辑上对我来说没有意义。
为什么零数字的总和(对于任何数字类型)不为零?这是 NULL 返回行为标准吗?
或者,也许我错过了一些东西。有什么理由必须NULL
在某些极端情况下求和?
这是 SQL 标准的要求。我最熟悉1992 年标准。引用它,重点是我的:
简而言之,NULL 总是从 SUM、MAX、MIN 和 AVG 的结果中排除。我不能确切地告诉你为什么会这样,除了我认为能够区分单个值 0 的总和和空集的总和是有用的。