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

Mysql 优化SQL查询以获取特定答案的计数,mysql,count,Mysql,Count,我正在创建一个包含10个问题的调查。所有问题都有5个可能的答案,取值范围为1-5。数据存储在每个用户一行的数据库中。每个问题的答案都有一个专栏 为了为每个问题的答案制作条形图,我当前检索特定列的值等于特定可能答案的行数: SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frage1` = 1 SELECT COUNT(*) AS `records_found` FROM (`antworten`) WHERE `frag

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

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

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
(...)
这将生成如下图形:


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

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

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

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

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

select  frage1, count(*) as `records_found`
  from  antworten
group by frage1
order by frage1
或类似的。可能有一种方法可以使用立方体和枢轴等同时完成所有问题,但我不知道。

也许:

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
也许:

等等

当然,如果将“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这看起来很棒!是否也可以为每个不返回结果的可能答案设置Anzahl=0?@danilo,这是一个空集合*的free-count()等于0。@Unreason:Yep,但上面的查询没有列出它们。但我刚刚意识到这可能是桌子设计的一个局限性。@danilo,是的,我现在明白你的意思了。您可以做的是将联合查询的结果与包含所有可能的问题和问题值组合的查询(这可以是一个临时表)连接起来,并将缺失行上的空值变为零。是的,我认为必须这样做+1这看起来很棒!是否也可以为每个不返回结果的可能答案设置Anzahl=0?@danilo,这是一个空集合*的free-count()等于0。@Unreason:Yep,但上面的查询没有列出它们。但我刚刚意识到这可能是桌子设计的一个局限性。@danilo,是的,我现在明白你的意思了。您可以做的是将联合查询的结果与包含问题和问题值的所有可能组合的查询(这可以是一个临时表)连接起来,并将缺失行上的空值变为零。我认为您不能直接这样做(多维数据集/数据透视/交叉表)因为数据不是从(重复组)开始规范化的。我不认为您可以直接这样做(多维数据集/数据透视/交叉表),因为数据不是从(重复组)开始规范化的。