SQL:具有空值的 AVG



据我所知,AVG() 函数忽略了 NULL 值。

所以 AVG(4,4,4,4,4,NULL) --> 4

就我而言,我不希望这种情况发生。

我需要这样的解决方案:AVG(4,4,4,4,4,NULL) --> 3,33

无需直接替换表本身中的 NULL 值。

有什么办法可以做到这一点吗?

> 使用 coalesce() 返回空列的实际值零:

select avg(coalesce(some_column, 0))
from ...

您对 AVG 的行为是正确的 - 使用 COALESCE 将聚合中的 NULL 转换为 0。

请参阅"为什么 SUM(null) 在 Oracle 中不是 0?

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

然后,相关代码很简单:

Avg(Coalesce(col,0))

您也可以使用 coalescenvl。由于上面已经给出了coalesce示例,因此下面是一个nvl

Avg(Nvl(Column_Name),0)

Coalesce、Nvl、Nvl2 函数在处理空值的情况下非常方便。您应该查找有关这些内容的一些示例和文档。

可以使用

NVL,NVL2或COALESCE来解决此问题。

喜欢这个从 dual 中选择 avg(4,4,4,4, nvl(null, 0 ));

另一种可能性是使用聚合函数 SUM 和 COUNT 计算平均值

SELECT SUM(column_with_value) / COUNT(primary_column) FROM ...

相关内容

  • 没有找到相关文章

最新更新