2010-08-04 55 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;