Group By的使用会影响平均值

时间:2018-06-12 17:02:21

标签: sql group-by sql-server-2014

这对我来说有点令人费解,所以我希望有人可以帮助理解它。我有以下查询来获取过去180天的平均数量。

SELECT 'TOTAL', AVG(M.LAST_QTY_SHIP_BASE)
FROM PS_IN_DEMAND M
WHERE M.DEMAND_DATE > DATEADD(d, -180, GETDATE())
AND M.INV_ITEM_ID = 1
AND M.BUSINESS_UNIT = 'WEST1'

这将返回值为 6.1919

的单行

如果我将 GROUP BY 条件添加到上述查询 - GROUP BY M.DEMAND_DATE,那么我会根据日期范围(127行)获得整个平均数量的结果集。如果我在Excel中平均所有这些值,我的平均值 6.3980 。我只是好奇为什么平均值不一样?我是否得到了群体的平均值,而不是值?谢谢。

修改

样本数据(使用GROUP BY M.DEMAND_DATE)

(No column name)    (No column name)  DEMAND_DATE
TOTAL                 10.000000       2017-12-15 00:00:00.000
TOTAL                 5.500000        2017-12-18 00:00:00.000
TOTAL                 8.000000        2017-12-19 00:00:00.000
TOTAL                 6.000000        2017-12-20 00:00:00.000
TOTAL                 8.000000        2017-12-21 00:00:00.000
TOTAL                 15.500000       2017-12-22 00:00:00.000
TOTAL                 8.000000        2017-12-26 00:00:00.000
TOTAL                 11.500000       2017-12-27 00:00:00.000
TOTAL                 6.000000        2017-12-29 00:00:00.000
TOTAL                 2.000000        2017-12-30 00:00:00.000
TOTAL                 4.333333        2018-01-02 00:00:00.000
TOTAL                 2.000000        2018-01-03 00:00:00.000
TOTAL                 8.000000        2018-01-04 00:00:00.000
TOTAL                 5.333333        2018-01-05 00:00:00.000
TOTAL                 3.000000        2018-01-08 00:00:00.000
TOTAL                 7.000000        2018-01-09 00:00:00.000
TOTAL                 6.500000        2018-01-10 00:00:00.000
TOTAL                 4.000000        2018-01-12 00:00:00.000
TOTAL                 1.000000        2018-01-13 00:00:00.000
TOTAL                 1.000000        2018-01-14 00:00:00.000
TOTAL                 8.000000        2018-01-15 00:00:00.000
TOTAL                 8.000000        2018-01-16 00:00:00.000
TOTAL                 10.000000       2018-01-17 00:00:00.000
TOTAL                 7.500000        2018-01-18 00:00:00.000
TOTAL                 4.000000        2018-01-19 00:00:00.000
TOTAL                 8.000000        2018-01-22 00:00:00.000
TOTAL                 4.250000        2018-01-23 00:00:00.000
TOTAL                 2.666666        2018-01-24 00:00:00.000
TOTAL                 8.000000        2018-01-25 00:00:00.000
TOTAL                 7.333333        2018-01-26 00:00:00.000
TOTAL                 6.000000        2018-01-29 00:00:00.000
TOTAL                 8.000000        2018-01-30 00:00:00.000
TOTAL                 5.000000        2018-01-31 00:00:00.000
TOTAL                 5.000000        2018-02-02 00:00:00.000
TOTAL                 6.000000        2018-02-05 00:00:00.000
TOTAL                 14.000000       2018-02-06 00:00:00.000
TOTAL                 3.000000        2018-02-07 00:00:00.000
TOTAL                 6.000000        2018-02-08 00:00:00.000
TOTAL                 6.000000        2018-02-09 00:00:00.000
TOTAL                 3.000000        2018-02-12 00:00:00.000
TOTAL                 14.000000       2018-02-13 00:00:00.000
TOTAL                 6.000000        2018-02-14 00:00:00.000
TOTAL                 10.000000       2018-02-15 00:00:00.000
TOTAL                 5.500000        2018-02-16 00:00:00.000
TOTAL                 7.500000        2018-02-19 00:00:00.000
TOTAL                 1.750000        2018-02-20 00:00:00.000
TOTAL                 7.000000        2018-02-21 00:00:00.000
TOTAL                 14.000000       2018-02-22 00:00:00.000
TOTAL                 3.000000        2018-02-23 00:00:00.000
TOTAL                 10.000000       2018-02-26 00:00:00.000
TOTAL                 11.000000       2018-02-27 00:00:00.000
TOTAL                 10.000000       2018-02-28 00:00:00.000
TOTAL                 4.666666        2018-03-02 00:00:00.000
TOTAL                 2.000000        2018-03-03 00:00:00.000
TOTAL                 2.000000        2018-03-04 00:00:00.000
TOTAL                 2.666666        2018-03-05 00:00:00.000
TOTAL                 10.000000       2018-03-06 00:00:00.000
TOTAL                 8.500000        2018-03-07 00:00:00.000
TOTAL                 6.000000        2018-03-08 00:00:00.000
TOTAL                 4.000000        2018-03-09 00:00:00.000
TOTAL                 10.000000       2018-03-12 00:00:00.000
TOTAL                 1.000000        2018-03-13 00:00:00.000
TOTAL                 14.000000       2018-03-14 00:00:00.000
TOTAL                 8.000000        2018-03-15 00:00:00.000
TOTAL                 10.000000       2018-03-16 00:00:00.000
TOTAL                 2.000000        2018-03-18 00:00:00.000
TOTAL                 14.000000       2018-03-20 00:00:00.000
TOTAL                 10.000000       2018-03-21 00:00:00.000
TOTAL                 5.000000        2018-03-23 00:00:00.000
TOTAL                 2.000000        2018-03-24 00:00:00.000
TOTAL                 5.500000        2018-03-26 00:00:00.000
TOTAL                 14.000000       2018-03-27 00:00:00.000
TOTAL                 10.500000       2018-03-28 00:00:00.000
TOTAL                 2.500000        2018-03-30 00:00:00.000
TOTAL                 1.500000        2018-04-02 00:00:00.000
TOTAL                 9.000000        2018-04-03 00:00:00.000
TOTAL                 4.000000        2018-04-04 00:00:00.000
TOTAL                 10.000000       2018-04-05 00:00:00.000
TOTAL                 6.000000        2018-04-06 00:00:00.000
TOTAL                 6.000000        2018-04-09 00:00:00.000
TOTAL                 7.500000        2018-04-10 00:00:00.000
TOTAL                13.500000        2018-04-11 00:00:00.000
TOTAL                 2.000000        2018-04-12 00:00:00.000
TOTAL                 2.800000        2018-04-13 00:00:00.000
TOTAL                 8.500000        2018-04-16 00:00:00.000
TOTAL                 8.000000        2018-04-17 00:00:00.000
TOTAL                 3.000000        2018-04-18 00:00:00.000
TOTAL                14.000000        2018-04-19 00:00:00.000
TOTAL                 4.000000        2018-04-20 00:00:00.000
TOTAL                 2.000000        2018-04-21 00:00:00.000
TOTAL                 2.000000        2018-04-23 00:00:00.000
TOTAL                 2.000000        2018-04-24 00:00:00.000
TOTAL                10.000000        2018-04-25 00:00:00.000
TOTAL                 4.666666        2018-04-27 00:00:00.000
TOTAL                 4.000000        2018-04-29 00:00:00.000
TOTAL                 5.000000        2018-04-30 00:00:00.000
TOTAL                 9.500000        2018-05-01 00:00:00.000
TOTAL                 4.000000        2018-05-02 00:00:00.000
TOTAL                 1.000000        2018-05-03 00:00:00.000
TOTAL                 3.333333        2018-05-04 00:00:00.000
TOTAL                 3.500000        2018-05-07 00:00:00.000
TOTAL                 9.500000        2018-05-08 00:00:00.000
TOTAL                 5.333333        2018-05-09 00:00:00.000
TOTAL                 2.000000        2018-05-10 00:00:00.000
TOTAL                 6.000000        2018-05-14 00:00:00.000
TOTAL                14.000000        2018-05-15 00:00:00.000
TOTAL                 8.000000        2018-05-16 00:00:00.000
TOTAL                 7.000000        2018-05-17 00:00:00.000
TOTAL                 5.000000        2018-05-18 00:00:00.000
TOTAL                 2.000000        2018-05-19 00:00:00.000
TOTAL                 5.000000        2018-05-21 00:00:00.000
TOTAL                14.000000        2018-05-22 00:00:00.000
TOTAL                 7.000000        2018-05-23 00:00:00.000
TOTAL                 6.000000        2018-05-24 00:00:00.000
TOTAL                 2.000000        2018-05-26 00:00:00.000
TOTAL                 6.750000        2018-05-29 00:00:00.000
TOTAL                 5.500000        2018-05-31 00:00:00.000
TOTAL                10.000000        2018-06-01 00:00:00.000
TOTAL                 2.000000        2018-06-03 00:00:00.000
TOTAL                 8.000000        2018-06-04 00:00:00.000
TOTAL                 2.000000        2018-06-05 00:00:00.000
TOTAL                 5.000000        2018-06-06 00:00:00.000
TOTAL                 7.333333        2018-06-07 00:00:00.000
TOTAL                 5.333333        2018-06-08 00:00:00.000
TOTAL                 2.000000        2018-06-10 00:00:00.000
TOTAL                10.000000        2018-06-11 00:00:00.000
TOTAL                 4.500000        2018-06-12 00:00:00.000

如果你对第二列中的所有值求平均值,那么我得到的是6.3980,而不是6.1919而不使用Group By。

2 个答案:

答案 0 :(得分:1)

平均值的平均值不一定是总平均值。 (事实上​​,情况甚至很少。)

示例数据:

day1   20
day1   20
day2   80

结果:

total average: (20 + 20 + 80) / 3 = 40

day1 average: (20 + 20) / 2 = 20
day2 average: 80 / 1 = 80

average of the averages: (20 + 80) / 2 = 50

答案 1 :(得分:1)

Thorsten是正确的,但值得多解释一下。

当你跑步时:

SELECT 'TOTAL', AVG(M.LAST_QTY_SHIP_BASE)
. . .;

您将获得所有数据的平均值。原始数据中的每一行都只加权一次。

当你跑步时:

SELECT M.DEMAND_DATE, AVG(M.LAST_QTY_SHIP_BASE), COUNT(*) as cnt
. . .
GROUP BY M.DEMAND_DATE;

您将同一日期的记录组合在一起,然后将它们视为单个值。也就是说,你的加权是而不是原来的

如果您有10条记录,其中9条记录,例如1月1日和1日是1月2日,那么第一种方法会平均对待每条记录。第二个记录将Jan 2记录视为第一个记录的9倍。所以,如果价值是" 1" 1月1日和" 2"在1月2日,两个平均值将是:

  • (9 + 2)/ 10 = 1.1 - 按记录加权
  • (1 + 2)/ 2 = 1.5 - 按天加权

两者都是合适的平均值。也许另一种看待这种情况的方式是,大约16%左右的世界人口会说普通话。只有约1%的国家会说普通话(这是新加坡和中国的官方语言)。这两个数字并不相同,因为各国的规模不同。