为什么AVG(x)给出的答案不同于AVR((isnull(x,0))?

时间:2012-08-25 03:03:07

标签: sql null aggregate-functions

X是具有数值和空值混合的列。

我不明白为什么将空值视为0会改变AVG值的结果。

不应该是这样,

(2 + null + 2) / 3 = 2 -- with null value

(2 + 0 + 2) / 3 = 2     -- no null value

1 个答案:

答案 0 :(得分:5)

如果您有null值,则不会将其考虑在内,因此元素数量(您的n)不会增加,而0会被视为有效值。

例如,如果您有:1,1,6,7,null,3,2,则总计20除以 6 (即3.33)。但是,如果您将null替换为0,则会20 / 7 (即2.86)。

SQLFiddle在MySQL服务器上演示了这种行为。

参考:请查看表格下方的documentation

This section describes group (aggregate) functions that operate on sets of values. Unless otherwise stated, group functions ignore NULL values.