理解MySQL

时间:2016-09-08 07:19:32

标签: mysql null sum

通常当NULL涉及任何等式时,整个结果都会解析为NULL(例如SELECT 2 + NULL + 5返回NULL

同样适用于以下情况:

SELECT SUM(NULL)返回NULLProposition #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值?

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

2 个答案:

答案 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的原因。