SQL-запрос для получения итогов - PullRequest
1 голос
/ 03 апреля 2011

У меня есть таблица, которая состоит из двух столбцов: вопрос и ответ.В настоящее время я использую этот запрос для получения итогов за ответы:

SELECT *, count(answer) AS total
FROM survey_data
GROUP BY answer (originally said: question)
ORDER BY `total` DESC

Он сообщает мне, как часто встречался ответ, чего я и хочу, однако я обнаружил, что на некоторые вопросы был один и тот же ответ.Этот запрос не принимает это во внимание.Как я могу уточнить этот запрос, чтобы он также отображал разные вопросы с одним и тем же ответом, чтобы я знал, какая сумма принадлежит какому вопросу.

Спасибо, Райан

1 Ответ

3 голосов
/ 03 апреля 2011

Вы должны использовать QUESTION в SELECT вместо *.Это проясняет, к чему относится общее количество

SELECT question, count(answer) AS total
FROM survey_data
GROUP BY question
ORDER BY `total` DESC

Запрос не и не может «сказать вам, как часто встречался ответ» - потому что выне группировка по ответу.Единственная причина, по которой «ответ» появляется в результате, заключается в том, что вы злоупотребили смешиванием MySQL агрегированного (сгруппированного столбца) и неагрегированного столбца в предложении SELECT с помощью * (поэтому вы показываете вопрос,и для каждого вопроса: полностью произвольный ответ.

Если вам необходимо узнать, сколько раз ответ получен, вам вместо этого нужно сгруппировать ответы.

SELECT answer, count(answer) AS total
FROM survey_data
GROUP BY answer
ORDER BY `total` DESC

А если вам нужны оба в одном и том же запросе (что не имеет смысла - просто используйте два запроса один за другим), то запутанный способ (не проверено)

SELECT 'question' as type, question, count(answer) AS total
FROM survey_data
GROUP BY question
UNION ALL
SELECT 'answer' as type, answer, count(answer) AS total
FROM survey_data
GROUP BY answer
ORDER BY type, `total` DESC


РЕДАКТИРОВАТЬ

Это может быть то, что вы после, что предполагает, что таблица не нормализована и что каждая комбинация ответ / вопрос может встречаться много раз

SELECT answer, question, count(*) AS total
FROM survey_data
GROUP BY answer, question
ORDER BY `total` DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...