gpt4 book ai didi

sql - SUM()/total rows 和 AVG() 在 sql server 之间返回不同的结果

转载 作者:行者123 更新时间:2023-12-01 09:56:12 27 4
gpt4 key购买 nike

我有一个包含 6549 行的 #time_per_bike 表(不存在重复项。甚至 bikeid 列也具有唯一 ID)。请查看示例 -

Sample Data

谁能告诉我为什么我在两个查询之间得到不同的结果(因为我相信它们执行相同的操作。如果我错了请纠正我)?

select SUM(AVG_WAIT_TIME)/6549 from #time_per_bike
-- Returns 69499

select AVG(AVG_WAIT_TIME) from #time_per_bike
-- Returns 69520

最佳答案

"Except for the COUNT(*) function, all aggregate functions perform a Null-elimination step, so that Null values are not included in the final result of the calculation." Ref: http://en.wikipedia.org/wiki/Null_(SQL)

因此您的数据中存在一些 NULL

您有两种选择,具体取决于您希望如何处理数据中的空值。您可以将其视为零值,也可以完全消除这些行,这样它们就不会对 COUNT(*) 产生影响(如 AVG() 所做的那样)。

来自引用的维基页面:

For example, in the following table, AVG(i) (the average of the values of i) will give a different result from that of AVG(j):

Table
i j
150 150
200 200
250 250
NULL 0

Here AVG(i) is 200 (the average of 150, 200, and 250), while AVG(j) is 150 (the average of 150, 200, 250, and 0).

A well-known side effect of this is that in SQL AVG(z) is not equivalent with SUM(z)/COUNT(*)

关于sql - SUM()/total rows 和 AVG() 在 sql server 之间返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26456591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com