MySQL WITH ROLLUP返回不正确(或意外)的结果

时间:2011-11-03 10:20:09

标签: mysql 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 个答案:

答案 0 :(得分:1)

汇总使用整个表的COUNT和SUM,然后进行除法。它不使用增量结果并对它们求平均值。

您将增量结果四舍五入到两位小数,但它们的值实际上并非如此。如果输出真值,您会发现平均值更有意义。

尝试同时输出SUM和COUNT,以便您自己验证。