Как объединить агрегатные функции в 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;
9
задан OMG Ponies 4 August 2010 в 20:36
поделиться

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 поддерживает функции аналитики / ранжирования / управления окнами ...

12
ответ дан 4 December 2019 в 21:47
поделиться

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

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

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

SELECT question, avg(count(answer)) 
FROM surveyValues 
WHERE study='a1' 
GROUP BY question; 
-3
ответ дан 4 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: