SQL查询获取总计

时间:2011-04-03 19:45:23

标签: mysql group-by

我有一个由两列组成的表:问题和答案。我目前使用此查询来获取答案的总数:

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

它告诉我答案的发生频率,这就是我想要的,但我发现有些问题的答案相同。此查询不会考虑该问题。如何改进此查询,以便它也会以相同的答案显示不同的问题,因此我知道哪个总数属于哪个问题。

谢谢, 莱恩

1 个答案:

答案 0 :(得分:3)

您应该在SELECT中使用QUESTION,而不是*。这使得总体与

相关的内容更加清晰
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