2010-07-01 107 views
0

我正在用10個問題創建一個調查。所有問題都有5個可能的答案,其值爲1-5。數據存儲在每個用戶一行的數據庫中。每個問題都有一個答案。優化SQL查詢以獲得特定答案的計數

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

這可能很愚蠢,並且可能有更好的方法來檢索所需的數據。我無法想出它,有人可以幫助我嗎? :) 謝謝。

回答

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 
+0

是的,我認爲它必須像這樣+1 – Unreason 2010-07-01 09:48:21

+0

這看起來不錯!是否也可以爲每個可能的答案設置Anzahl = 0而不返回結果? – 2010-07-01 09:51:36

+1

@danilo,這是免費的 - 空集*的計數(*)*等於0. – Unreason 2010-07-01 09:53:10

0

對於單一的問題,你可以使用

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

或相似。可能有一種方法可以立即使用多維數據集和樞軸等來完成所有問題,但我不知道它。

+1

我不認爲你可以直接做(立方體/樞軸/交叉表),因爲數據沒有標準化爲以(重複組)開始。 – Unreason 2010-07-01 09:49:05