2013-08-27 84 views
0

我遇到了Query問題。請有人幫助我請MySql在每個字段上計數

讓我們考慮這樣一個表。 我們將存儲0代表否,1代表存儲。對於某些表,我們使用1表示yes,而2表示no。每個月,我們會派一個調查問題,以我們的客戶,他們將是打勾或不

+----------------------------------------------------------------------+ 
| id| Month | Customer | QuestionA | QuestionB | QuestionC | QuestionD | 
+---+-------+----------+-----------+-----------+-----------+-----------+ 
| 1 | Jan | 1100 | 1  | 0  | 1  | 0  | 
| 2 | Jan | 1101 | 0  | 0  | 1  | 1  | 
| 3 | Jan | 1102 | 1  | 1  | 1  | 1  | 
| 4 | Feb | 1100 | 1  | 1  | 0  | 1  | 
| 5 | Mar | 1100 | 1  | 1  | 0  | 0  | 
+---+-------+----------+-----------+-----------+-----------+-----------+ 

我怎麼可以寫一個查詢,它會顯示有多少對每個問題打勾肯定。換言之,針對一月我需要得到像

+------------------------------------------------------------------+ 
| Month | Customer | QuestionA | QuestionB | QuestionC | QuestionD | 
+-------+----------+-----------+-----------+-----------+-----------+ 
| Jan | 1100 | 2  | 1  | 3  | 2  | 
+-------+----------+-----------+-----------+-----------+-----------+ 

即QuestionA被選中的2個客戶端和Questionb 1等等...

編輯:

但在某些表中,我們已經使用了1,而沒有使用2。該怎麼做。對不起,我們已經設計成這樣,並且已經使用了3年以上。所以他們不會允許我將0改爲否,1是

+0

您試過了什麼?在[man](http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html)中查看「GROUP BY」和「SUM()」。 – amaster

+0

現在即時通訊使用每個計數的查詢,如來自tblsurvery的select count(QuestionA),其中QuestionA = 1和month ='Jan'。 –

+0

你爲什麼將客戶領域保留在結果中? –

回答

0

沒有測試過但您可以試試這個。告訴我結果,以便我們可以根據需要進行更新。

select month, sum(QuestionA), sum(QuestionB), sum(QuestionC), sum(QuestionD) from table_name where month='Jan' 
+0

謝謝,但在某些表中,我們已經使用1爲是和2爲否。該怎麼做。對不起,我們已經設計成這樣,並且已經使用了3年以上。所以他們不會允許我改變0表示否,1表示是。 –

0

這應該工作,你需要看看會有什麼發生,雖然如果沒有一年場和明年一月來臨時...你需要一年場也讓您可以按月份和年份

SELECT 
    `Month`, 
    SUM(`QuestionA`) AS `QuestionA`, 
    SUM(`QuestionB`) AS `QuestionB`, 
    SUM(`QuestionC`) AS `QuestionC`, 
    SUM(`QuestionD`) AS `QuestionD` 
FROM 
    tblsurvery 
GROUP BY 
    `Month` 

編輯:

thanks but in some table we have used 1 for yes and 2 for no

SELECT 
    `Month`, 
    SUM(IF(`QuestionA`=1,1,0) AS `QuestionA`, 
    SUM(IF(`QuestionB`=1,1,0) AS `QuestionB`, 
    SUM(IF(`QuestionC`=1,1,0) AS `QuestionC`, 
    SUM(IF(`QuestionD`=1,1,0) AS `QuestionD` 
FROM 
    tblsurvery 
GROUP BY 
    `Month` 
+0

謝謝,但在某些表格中,我們用1表示yes,2表示no。該怎麼做。對不起,我們已經設計成這樣,並且已經使用了3年以上。所以他們不會允許我改變0表示否,1表示是。對不起。這對我來說是真正的問題。有些時候,如果他們沒有保存任何東西,它將爲空值 –

+0

@SindhuVinodhini請參閱我的編輯或nosid答案與編輯上面的正確答案。並且請下次在你的實際問題中包含像你這樣的信息。 – amaster

+0

非常感謝您的幫助 –

0

如果不需要客戶領域(即我所懷疑的),你可以試試這個:

SELECT 
    month, 
    SUM(IF(QuestionA=1,1,0)) AS QuestionA, 
    SUM(IF(QuestionB=1,1,0)) AS QuestionB, 
    SUM(IF(QuestionC=1,1,0)) AS QuestionC, 
    SUM(IF(QuestionD=1,1,0)) AS QuestionD 
FROM survey 
GROUP BY month; 

見SQLFIDDLE:http://www.sqlfiddle.com/#!2/19a56/3/0

如果你需要它,試試這個:

SELECT 
    month, min(customer), 
    SUM(IF(QuestionA=1,1,0)) AS QuestionA, 
    SUM(IF(QuestionB=1,1,0)) AS QuestionB, 
    SUM(IF(QuestionC=1,1,0)) AS QuestionC, 
    SUM(IF(QuestionD=1,1,0)) AS QuestionD 
FROM survey 
GROUP BY month; 

請參閱SQLFIDDLE:http://www.sqlfiddle.com/#!2/19a56/6/0