优化SQL查询以获取特定答案的计数

时间:2010-07-01 09:41:29

标签: mysql count

我正在创建一个包含10个问题的调查。所有问题都有5个可能的答案,值为1-5。数据存储在每个用户一行的数据库中。每个问题的答案都有一栏。

Data table

要为每个问题的答案制作条形图,我目前检索特定列的值等于特定可能答案的行数:

SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage1` = 1
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage1` = 2
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage1` = 3
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage1` = 4
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage1` = 5
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage2` = 1
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage2` = 2
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage2` = 3
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage2` = 4
SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage2` = 5
(...)

这会生成如下图:http://i.imgur.com/SESJ8.png

这可能非常愚蠢,并且可能有更好的方法来检索所需的数据。我只是想不起来,有人能帮帮我吗? :)谢谢。

2 个答案:

答案 0 :(得分:4)

也许:

SELECT 1 As FrageNummer, frage1 As Frage, count(*) As Anzahl
FROM antworten
GROUP BY frage1
UNION
SELECT 2 As FrageNummer, frage2 As Frage, count(*) As Anzahl
FROM antworten
GROUP BY frage2

等等。

如果'fragen'被放入行而不是列中,那么查询当然会更容易,即有这样的数据:

id | quartalid | frage_nr | frage
---------------------------------
9  |         5 |        1 |     5
9  |         5 |        2 |     5
9  |         5 |        3 |     2

然后你可以像这样查询

SELECT frage_nr, frage, count(*)
FROM antworten
GROUP BY frage_nr, frage

答案 1 :(得分:0)

对于单个问题,您可以使用

select  frage1, count(*) as `records_found`
  from  antworten
group by frage1
order by frage1

或类似的。可能有一种方法可以使用立方体和枢轴等同时完成所有问题,但我不知道。