Вы должны использовать 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