通常当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值?
你是对的,聚合函数以不同于非聚合函数的方式处理空值:
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的原因.
| 归档时间: |
|
| 查看次数: |
6903 次 |
| 最近记录: |