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