gpt4 book ai didi

sql - 为什么 SUM(null) 在 Oracle 中不是 0?

转载 作者:太空狗 更新时间:2023-10-30 01:42:32 25 4
gpt4 key购买 nike

遇到空值时,如果能解释 Oracle 中 SUM 函数的内部功能,我们将不胜感激:
结果

select sum(null) from dual;
is null

但是当一个空值在一个值序列中时(比如一个可以为空的列的总和),空值的计算值将为 0

select sum(value) from
(
select case when mod(level , 2) = 0 then null else level end as value from dual
connect by level <= 10
)
is 25

看到
的结果会更有趣

select (1 + null) from dual
is null

因为任何使用 null 的操作都将导致 null(is null 运算符除外)。

==========================
一些因评论而更新:

create table odd_table as select sum(null) as some_name from dual;

结果:

create table ODD_TABLE
(
some_name NUMBER
)

为什么 some_name 列的类型是 number

最佳答案

如果您正在寻找这种行为的基本原理,那么可以在 ANSI SQL 标准中找到它,该标准规定聚合运算符忽略 NULL 值。

如果您想覆盖该行为,那么您可以:

Sum(Coalesce(<expression>,0))

...尽管将 Sum() 用于...会更有意义

Coalesce(Sum(<expression>),0)

你可能更有意义:

Avg(Coalesce(<expression>,0))

……或者……

Min(Coalesce(<expression,0))

其他 ANSI 聚合怪癖:

  1. Count() 永远不会返回 null(当然也不会返回负数)
  2. 仅选择没有分组依据的聚合函数将始终返回单行,即使没有可供选择的数据也是如此。

所以...

Coalesce(Count(<expression>),0)

... 浪费了良好的合并。

关于sql - 为什么 SUM(null) 在 Oracle 中不是 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17511567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com