如何在MySQL中组合聚合函数?

时间:2010-08-04 20:31:14

标签: sql mysql aggregate-functions

我只是在学习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;

2 个答案:

答案 0 :(得分: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支持分析/排名/窗口函数,您可以将分析包装在聚合中......

答案 1 :(得分:-3)

是的 - 那些看起来都很合理。

您是否尝试过这些并获得了意想不到的结果?

通常,我希望您还在选择列表中包含驱动列:

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