2011-11-03 68 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