MySQL WITH ROLLUP возвращает неверные (или неожиданные) результаты - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть набор данных, который определяет рейтинги в таблице опроса для событий в разных местах.

Я пытаюсь отобразить среднюю оценку для каждого местоположения со средним значением для всех местоположений в последней строке.

В данный момент мой запрос выглядит следующим образом:

SELECT 
IFNULL(l.title, 'Total') AS location,
ROUND(AVG(NULLIF(s.rating, 0)), 2) AS rating
FROM surveys s 
INNER JOIN events e
ON e.id = s.event_id
INNER JOIN locations l
ON l.id = e.location_id
GROUP BY l.title WITH ROLLUP

Это дает мне следующие значения для каждого местоположения:

8.22, 8.67, 8.67, 8.56, 7.86, 8.50. 8.78, 7.33

Однако, итоговый итогвозвращается как 8.37, но на самом деле должно быть 8.32.

Я что-то не так делаю?

1 Ответ

1 голос
/ 03 ноября 2011

Накопительный пакет использует COUNT и SUM для всей таблицы, а затем выполняет деление. Он не использует добавочные результаты и усредняет их.

Вы округляете инкрементные результаты до двух десятичных разрядов, но на самом деле их значение не таково. Если вы выведете истинное значение, вы увидите, что среднее значение имеет больше смысла.

Попробуйте также вывести СУММУ и СЧЕТ, чтобы вы могли убедиться в этом сами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...