Ree*_*roi 3 sql sql-server average sum sql-server-2008
我有一个表#time_per_bike,有6549行(没有重复项.即使是bikeid列也有唯一的ID).请看样品 -

谁能告诉我为什么我在两个查询之间得到不同的结果(因为我相信他们做同样的操作.如果我错了请纠正我)?
select SUM(AVG_WAIT_TIME)/6549 from #time_per_bike
-- Returns 69499
select AVG(AVG_WAIT_TIME) from #time_per_bike
-- Returns 69520
Run Code Online (Sandbox Code Playgroud)
"除COUNT(*)函数外,所有聚合函数都执行Null消除步骤,因此Null值不包含在计算的最终结果中." 参考:http://en.wikipedia.org/wiki/Null_(SQL)
所以你NULL的数据中有一些存在.
根据您希望如何处理数据中的空值,您有两种选择.您可以将其视为零值,也可以完全消除这些行,这样它们就不会对COUNT(*)做出贡献(如同AVG()).
来自引用的维基页面:
例如,在下表中,AVG(i)(i的平均值)将给出与AVG(j)不同的结果:
Run Code Online (Sandbox Code Playgroud)Table i j 150 150 200 200 250 250 NULL 0这里AVG(i)是200(平均150,200和250),而AVG(j)是150(150,200,250和0的平均值).
一个众所周知的副作用是在SQL中AVG(z)与SUM(z)/ COUNT(*)不等效
| 归档时间: |
|
| 查看次数: |
2437 次 |
| 最近记录: |