理解MySQL中的SUM(NULL)

Ano*_*One 16 mysql null sum

通常当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;
Run Code Online (Sandbox Code Playgroud)

输出: 100

但我在期待NULL.

在这种情况下,MySQL是否会以静默方式跳过这些NULL值?

http://sqlfiddle.com/#!9/3f99bb/2

e4c*_*4c5 14

好吧,它在手册中有解释

SUM([DISTINCT] expr)
返回expr的总和.如果返回集没有行,则SUM()返回NULL.DISTINCT关键字可用于仅对expr的不同值求和.

如果没有匹配的行,则SUM()返回NULL.

更重要的是它还说:

本节介绍对值集合进行操作的组(聚合)函数.除非另有说明,否则组函数会忽略NULL值.

换句话说,SUM的行为就像这样,因为它的定义方式就是这样.


fth*_*lla 8

你是对的,聚合函数以不同于非聚合函数的方式处理空值:

select 2 + NULL + 5
Run Code Online (Sandbox Code Playgroud)

返回NULL,因为此上下文中的NULL表示未知值,因此结果也将为NULL(未知).

这将返回7:

select SUM(n)
from (
  select 2 as n
  union all select null
  union all select 5
) s
Run Code Online (Sandbox Code Playgroud)

因为在这种情况下,NULL值即使是未知的,也可以被视为"未指定的值".原因是将NULL用作未指定的值是非常常见的,并且在聚合函数中包含NULL几乎没有用,这就是聚合函数被定义为忽略NULL的原因.