2010-04-12 108 views
2

我的當前查詢讀:MySQL:是否可以計算MAX(AVG(field))?

SELECT entry_id, user_id, cat_id, AVG(rating) as avg_rate 
FROM `entry_rate` 
WHERE 1 
GROUP BY entry_id 

cat_id涉及不同的類別:1,2,3或4

有一種方法我可以找到每個用戶的最大平均在每個類別沒有設置額外的表?回報可能是4對每個最大avg_rate user_id說明

訪問下面的鏈接,例如:

http://lh5.ggpht.com/_rvDQuhTddnc/S8Os_77qR9I/AAAAAAAAA2M/IPmzNeYjfCA/s800/table1.jpg

+0

感謝編輯丹尼爾! – Brad 2010-04-14 23:08:53

回答

3

未必是最有效的方法:

select user_id, cat_id, MAX(avg_rate) 
FROM (
    SELECT entry_id, user_id, cat_id, AVG(rating) as avg_rate 
    FROM entry_rate 
    GROUP BY entry_id, user_id, cat_id) t 
GROUP BY user_id, cat_id 
+0

您需要在內部查詢中通過entry_id和user_id進行分組。另外,不需要WHERE 1。 – 2010-04-12 23:37:02

+0

@BlueRaja,你說得對,我只是複製他的查詢,也有這些問題。固定。 – tloflin 2010-04-12 23:42:38

+0

@tloflin和@ BlueRaja-哦,我的天啊!你們是巫師!我已經過了一段時間,沒有運氣(我認爲我是一個新手...)。謝謝! 順便說一下,第五行結尾的't'是什麼?這是我不瞭解的一個因素。 – Brad 2010-04-12 23:54:07

1
SELECT s.user_id,s.cat_id,max(s.avg_rate) FROM (
    SELECT entry_id, user_id, cat_id, AVG(rating) as avg_rate 
    FROM entry_rate 
    GROUP BY entry_id,user_id,cat_id) as s 
GROUP BY s.user_id,s.cat_id 
+0

這也是一個很好的答案!謝謝(但對綠色複選標記有點太慢了!) – Brad 2010-04-12 23:56:27

2

你可以做出這樣的表述。

SELECT entry_id, user_id, cat_id, AVG(rating) as avg_rate 

FROM 'entry_rate' 

GROUP BY entry_id 

order by AVG(rating) DESC 

limit 1 

這使得結果順序爲avg(rating)並選擇第一行。並可以使limit 1,1選擇第二個最大元素