gpt4 book ai didi

sql-server - 为什么空记录集上的 SUM(...) 返回 NULL 而不是 0?

转载 作者:行者123 更新时间:2023-12-02 09:34:04 26 4
gpt4 key购买 nike

我明白为什么null + 1或(1 + null)返回null:null 表示“未知值”,如果一个值未知,则其后继者也未知。对于涉及 null 的大多数其他操作也是如此。[*]

但是,我不明白为什么会发生以下情况:

SELECT SUM(someNotNullableIntegerField) FROM someTable WHERE 1=0

此查询返回null。为什么?这里不涉及未知值! WHERE 子句返回条记录,并且空值集的总和为0。[**] 请注意,该集不是未知已知它是空的

我知道我可以通过使用 ISNULLCOALESCE 来解决此行为,但我试图理解为什么出现此行为,这对我来说似乎违反直觉,但被选中了。

对于为什么这有意义有什么见解吗?

<小时/>

[*] 有一些值得注意的异常(exception),例如 null OR true,显然 true 是正确的结果,因为未知值并不重要。

[**] 就像一组空值的乘积是1。从数学上来说,如果我将 $(Z, +)$ 扩展为 $(Z union {null}, +)$,单位元素的明显选择仍然是 0,而不是 null,因为 x + 0 = xx + null = null

最佳答案

ANSI-SQL 标准将空集的 SUM 结果定义为 NULL。我不知道他们为什么这样做,但至少所有数据库引擎的行为应该是一致的。

引用:http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt第 126 页:

b) If AVG, MAX, MIN, or SUM is specified, then

         Case:

i) If TXA is empty, then the result is the null value.

TXA 是所选列的有效结果集。

关于sql-server - 为什么空记录集上的 SUM(...) 返回 NULL 而不是 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12730457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com