SQL:带有NULL值的AVG

时间:2014-03-06 09:39:10

标签: sql oracle null average

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

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

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

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

不直接在表本身中替换NULL值。 有没有办法做到这一点?

5 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

你对AVG的行为是正确的 - 使用COALESCE将NULL转换为0。

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

中的this answer
  

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

相关的代码就是:

Avg(Coalesce(col,0))

答案 2 :(得分:1)

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

的示例
Avg(Nvl(Column_Name),0)

Coalesce,Nvl,Nvl2函数在处理空值的情况下很方便。 您应该查看一些关于这些的示例和文档。

答案 3 :(得分:0)

NVL,NVL2或COALESCE可用于解决此问题。

像这样 从对偶中选择avg(4,4,4,4,nvl(null,0));

答案 4 :(得分:0)

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

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