2010-08-04 53 views
8

我只是在學習MySQL - 有沒有一種方法來組合(或嵌套)聚合函數?如何結合MySQL中的集合函數?

給定查詢:

SELECT user, count(answer) FROM surveyValues WHERE study='a1' GROUP BY user; 

這會給我的每個用戶回答問題的數量。我真正想要的是每個用戶回答的問題的平均數量...類似於:

SELECT avg(count(answer)) FROM surveyValues WHERE study='a1'; 

什麼是計算此統計量的正確方法?

如果這是可能的,是否有辦法打破每個問題的統計數據? (用戶可以多次回答相同的問題)。喜歡的東西:

SELECT avg(count(answer)) FROM surveyValues WHERE study='a1' GROUP BY question; 

回答

12

你必須使用子查詢:

SELECT x.user, 
     AVG(x.cnt) 
    FROM (SELECT user, COUNT(answer) AS cnt 
      FROM surveyValues 
      WHERE study='a1' 
     GROUP BY user) x 
GROUP BY x.user 

你不能用其它集合包裝的集合。如果MySQL支持分析/排名/窗口功能,則可以將分析打包到一個聚合中...

+0

事實上,子查詢答案。如果您有多個查詢處理每個用戶的答案數量,則可以考慮將子查詢放入視圖中。 – tdammers 2010-08-04 20:37:17

+0

呵呵,你可以別名列嗎? SUPER-漂亮。 (我確信這聽起來超級天真,但這只是我的一天)。謝謝,完美的作品。 – Ender 2010-08-04 20:40:13

-3

是的 - 這些看起來都很合理。

你有沒有試過它們並收到意想不到的結果?

通常情況下,我希望你也必須包括在選擇列表中的驅動柱:

SELECT question, avg(count(answer)) 
FROM surveyValues 
WHERE study='a1' 
GROUP BY question;