MySQL WITH ROLLUP возвращает неверные (или неожиданные) результаты

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

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

На данный момент мой запрос выглядит так:

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 ответ

Решение

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

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

Попробуйте также вывести SUM и COUNT, чтобы вы могли убедиться в этом сами.

Другие вопросы по тегам