通常当NULL
涉及任何等式时,整个结果都会解析为NULL
(例如SELECT 2 + NULL + 5
返回NULL
)
同样适用于以下情况:
SELECT SUM(NULL)
返回NULL
。 Proposition #1
使用SUM
汇总列时,会发生什么?该列也可以包含NULL
值?
基于proposition #1
为什么输出不会导致NULL
。
CREATE TABLE t (age INT NULL);
INSERT INTO t (age) VALUES (15),(20), (NULL), (30), (35);
SELECT
SUM(age)
FROM t;
输出: 100
但我期待NULL
。
在这种情况下,MySQL是否会以静默方式跳过这些NULL值?
答案 0 :(得分:13)
好在manual
中解释过SUM([DISTINCT] expr)
返回expr的总和。如果返回集没有行,则SUM()返回 空值。 DISTINCT关键字可用于仅对不同的值求和 of expr。如果没有匹配的行,则SUM()返回NULL。
它还说了什么:
本节介绍操作的组(聚合)函数 价值观。除非另有说明,否则组函数会忽略NULL 值。
换句话说,SUM的行为与此类似,因为它的定义方式如此。
答案 1 :(得分:6)
你是对的,聚合函数以不同于非聚合函数的方式处理空值:
select 2 + NULL + 5
返回NULL,因为此上下文中的NULL表示未知值,因此结果也将为NULL(未知)。
这将返回7:
select SUM(n)
from (
select 2 as n
union all select null
union all select 5
) s
因为在此上下文中,NULL值即使是未知的,也可以被视为“未指定的值”。原因是使用NULL作为未指定的值是很常见的,并且在聚合函数中包含NULL几乎没有用,这就是聚合函数被定义为忽略NULL的原因。