>查询对具有 10 个元组的表的单个列执行总和聚合。如果正好有一个元组在该列上具有 NULL 值,则会发生以下哪项情况?
- 查询将返回 NULL。
- 查询将返回其余 9 个值的总和。
- 查询将引发异常。
这会是3吗?
聚合函数忽略空值。这就是他们行为的定义。
所以你的问题的答案是:2(
您可以自己轻松测试:
create table test_null(value integer);
insert into test_null
values (1),(1),(1),(1),(1),(1),(1),(1),(1),(null);
select sum(value)
from test_null;
返回
sum
---
9
当您使用avg()
聚合函数时,"忽略"部分更为明显。上述测试数据的结果是 1,而不是人们想象的 0.9。这是因为聚合忽略具有 null 值的行,因此平均值计算为 9/9。
select avg(value)
from test_null;
相当于:
select avg(value)
from test_null
WHERE value IS NOT NULL;
在线示例:http://rextester.com/QQREJS70393