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

iri*_*ent 1 sql null aggregate-functions

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

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

不应该这样,

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

(2 + 0 + 2) / 3 = 2     -- no null value
Run Code Online (Sandbox Code Playgroud)

Bar*_*tak 5

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

例如,如果你有:1,1,6,7,null,3,2它将被20除以6(即3.33).但是,如果你null0它替换它20 /7(即2.86).

SQLFiddle在MySQL服务器上演示此行为.

参考:请查看表格下方的文档:

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