据我所了解,AVG()函数忽略NULL值。
因此AVG(4,4,4,4,4,NULL) --> 4。
在我的情况下,我不想让它发生。
我需要这样的解决方案:AVG(4,4,4,4,4,NULL) --> 3.33,
而不直接替换表中的NULL值。
有什么办法可以做到这一点吗?
使用coalesce()
函数来将null列返回为零的实际值:
select avg(coalesce(some_column, 0))
from ...
请参阅"Why SUM(null) is not 0 in Oracle?"中的答案。
如果你正在寻找这种行为的理由,那么它可以在ANSI SQL标准中找到,这些标准规定聚合运算符忽略NULL值。
相关代码如下:
Avg(Coalesce(col,0))
SELECT SUM(column_with_value) / COUNT(primary_column) FROM ...
您也可以使用coalesce
或nvl
函数。
由于上面已经给出了coalesce
的示例,这里是一个nvl
的示例。
Avg(Nvl(Column_Name),0)
在处理空值的情况下,Coalesce、Nvl、Nvl2函数非常方便。你应该查阅一些关于这些函数的示例和文档。