Использование Group By влияет на средний уровень - PullRequest
0 голосов
/ 12 июня 2018

Это немного озадачивает меня, поэтому я надеюсь, что кто-то может помочь разобраться в этом.У меня есть следующий запрос, который дает мне среднее количество за последние 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

Если вы усредните все значения в2-й столбец я получаю 6,3980 вместо 6,1919 без использования группы By.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Торстен верен, но стоит немного больше объяснений.

Когда вы запускаете:

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 был2 января первый метод обрабатывает каждую запись одинаково.Вторая обрабатывает запись 2 января как 9-кратное значение первой.Таким образом, если бы значения были 1 на 1 января и 2 на 2 января, эти два средних значения были бы:

  • (9 + 2) / 10 = 1,1 - взвешенные по записям
  • (1 + 2) / 2 = 1,5 - взвешено по дням

Оба являются подходящими средними значениями.Возможно, другой способ взглянуть на это состоит в том, что около 16% населения мира говорит на мандаринском.Только около 1% стран говорят на мандаринском языке (это официальный язык в Сингапуре и Китае).Эти два числа не совпадают, потому что страны имеют разные размеры.

0 голосов
/ 12 июня 2018

Среднее из средних значений не обязательно является общим средним.(На самом деле это даже редко бывает.)

Пример данных:

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
...