我有一组数据,这些数据定义了不同地点事件的调查表格中的评级。
我正在尝试显示每个位置的平均评分与最后一行中所有位置的平均评分。
目前,我的查询如下所示:
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
但是,最终的Total返回8.37,但实际上应该是8.32。
我做错了什么吗?
发布于 2011-11-03 10:28:48
汇总使用整个表的计数和和,然后进行除法。它不使用增量结果并对它们进行平均。
您将增量结果四舍五入为两位小数,但它们的值实际上并非如此。如果你输出的是真值,你会发现平均值更有意义。
还可以尝试输出SUM和COUNT,这样您就可以自己验证。
https://stackoverflow.com/questions/7993228
复制