使用 Group By 会影响平均值
Use of Group By affects average
这让我有点困惑,所以我希望有人能帮助理解它。我有以下查询获取过去 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'
这 returns 一行,值为 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。
平均值的平均值不一定是总平均值。 (事实上 ,这种情况甚至很少见。)
示例数据:
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
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 日,那么第一种方法会平等对待每条记录。第二个将 1 月 2 日的记录视为第一个记录的 9 倍。因此,如果 1 月 1 日的值为“1”,1 月 2 日的值为“2”,则两个平均值将为:
- (9 + 2) / 10 = 1.1 -- 按记录加权
- (1 + 2) / 2 = 1.5 -- 按天数加权
两者都是合适的平均值。也许另一种看待这个问题的方式是,世界上大约 16% 左右的人口说普通话。只有大约 1% 的国家说普通话(它是新加坡和中国的官方语言)。这两个数字不一样,因为国家大小不同。
这让我有点困惑,所以我希望有人能帮助理解它。我有以下查询获取过去 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'
这 returns 一行,值为 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。
平均值的平均值不一定是总平均值。 (事实上 ,这种情况甚至很少见。)
示例数据:
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
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 日,那么第一种方法会平等对待每条记录。第二个将 1 月 2 日的记录视为第一个记录的 9 倍。因此,如果 1 月 1 日的值为“1”,1 月 2 日的值为“2”,则两个平均值将为:
- (9 + 2) / 10 = 1.1 -- 按记录加权
- (1 + 2) / 2 = 1.5 -- 按天数加权
两者都是合适的平均值。也许另一种看待这个问题的方式是,世界上大约 16% 左右的人口说普通话。只有大约 1% 的国家说普通话(它是新加坡和中国的官方语言)。这两个数字不一样,因为国家大小不同。