2011-11-03 139 views
0

我有一组数据,它定义了调查表中不同位置事件的评分。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。

我做错了什么?

+0

你可以简化它来删除连接吗? –

回答

1

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

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

尝试输出SUM和COUNT,以便自己验证事物。

+0

谢谢。有没有可靠的方法来获得增量结果? – Dan

+0

包装它。在没有汇总的情况下获取结果,然后用汇总将其与第二次选择进行包装。例如:'SELECT ... FROM(SELECT ... GROUP ...)inside_name ... ROLLUP ...' – Ariel