Как объединить агрегатные функции в 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;

2 ответов


вы должны использовать подзапросы:

  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 поддерживает аналитические/ранжирующие / оконные функции...


да - все они выглядят разумными.

вы пробовали их и получили неожиданные результаты?

обычно я ожидаю, что вы также включите столбец вождения в список выбора:

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