2014-11-06 96 views
1

我有一個48列的mysql表。表中的值將是「是」或「否」。我想要從一行中得到「是」和「否」的數目。來自mysql數據庫錶行的是和否值的總數

例如:

一個具有23個是年代和25號的行,那麼就應該在前端顯示的總數 enter image description here

+0

發表您的查詢。 – 2014-11-06 08:49:24

+0

''''SELECT answer,count(*) FROM yourTable GROUP BY answer''''? – 2014-11-06 08:49:35

+0

感謝您的回覆。計數應該基於該行。 – user2372469 2014-11-06 08:52:08

回答

3

所以,你的表是這樣的:

id  p_id  answer1 answer2 answer3 ....etc 
-------------------------------------------------- 
1  123  yes  no  yes 

不要這樣做!這不是關係數據庫的工作方式。您將串行數據存儲在行中,而不是列中。這將是更好的正常化表和每個答案存儲在一個單獨的行:

p_id  answer value 
----------------------- 
123  1  yes 
123  2  no 
123  3  yes 

現在你可以很容易地計算特定ID yes/no答案:

SELECT value, COUNT(*) FROM yourTable WHERE p_id=123 GROUP BY value 

如果你必須堅持你目前的結構,唯一合理的選擇是SELECT *並在php中進行計數。在Mysql中沒有直接的方法來以每列爲基礎計算值。

+0

格奧爾格,我會用我的數據庫表格截圖更新我的問題,那麼你可以很容易地理解什麼是要求 – user2372469 2014-11-06 09:02:10

+0

@ user2372469:謝謝,我已經更新了答案。 – georg 2014-11-06 09:07:21

+0

我想要從那一行中得到yes和no的總數 – user2372469 2014-11-06 09:11:13

0
SELECT col1 + col2 + ... + col48 as yes, * FROM table_name 

我希望你的表結構會支持這個;

我從來沒有嘗試過,但我以this answer作爲參考。

編輯
忘記,如果你更改列到emun大部分代碼仍然可能會工作,而我的查詢就可以了(只要確保沒有首先在枚舉),以mention-

0

使用您當前的結構唯一可行的方法是檢查每列,如果選擇「是」,則添加1;如果選擇「否」,則選擇0。

SELECT id, p_id, 
     IF(Analysis1 = 'Yes', 1, 0) + 
     IF(Analysis2 = 'Yes', 1, 0) + 
     IF(Analysis3 = 'Yes', 1, 0) + 
     IF(Analysis4 = 'Yes', 1, 0) + 
     IF(Analysis5 = 'Yes', 1, 0) + 
     IF(Analysis6 = 'Yes', 1, 0) + 
     IF(Analysis7 = 'Yes', 1, 0) + 
     IF(Analysis8 = 'Yes', 1, 0) + 
     IF(Analysis9 = 'Yes', 1, 0) + 
     IF(Analysis10 = 'Yes', 1, 0) + 
     IF(Analysis11 = 'Yes', 1, 0) + 
     IF(Analysis12 = 'Yes', 1, 0) + 
     IF(Analysis13 = 'Yes', 1, 0) + 
     IF(Analysis14 = 'Yes', 1, 0) + 
     IF(Analysis15 = 'Yes', 1, 0) + 
     IF(Analysis16 = 'Yes', 1, 0) + 
     IF(Analysis17 = 'Yes', 1, 0) + 
     IF(Analysis18 = 'Yes', 1, 0) + 
     IF(Analysis19 = 'Yes', 1, 0) + 
     IF(Analysis20 = 'Yes', 1, 0) + 
     IF(Analysis21 = 'Yes', 1, 0) + 
     IF(Analysis22 = 'Yes', 1, 0) + 
     IF(Analysis23 = 'Yes', 1, 0) + 
     IF(Analysis24 = 'Yes', 1, 0) + 
     IF(Analysis25 = 'Yes', 1, 0) + 
     IF(Analysis26 = 'Yes', 1, 0) + 
     IF(Analysis27 = 'Yes', 1, 0) + 
     IF(Analysis28 = 'Yes', 1, 0) + 
     IF(Analysis29 = 'Yes', 1, 0) + 
     IF(Analysis30 = 'Yes', 1, 0) + 
     IF(Analysis31 = 'Yes', 1, 0) + 
     IF(Analysis32 = 'Yes', 1, 0) + 
     IF(Analysis33 = 'Yes', 1, 0) + 
     IF(Analysis34 = 'Yes', 1, 0) + 
     IF(Analysis35 = 'Yes', 1, 0) + 
     IF(Analysis36 = 'Yes', 1, 0) + 
     IF(Analysis37 = 'Yes', 1, 0) + 
     IF(Analysis38 = 'Yes', 1, 0) + 
     IF(Analysis39 = 'Yes', 1, 0) + 
     IF(Analysis40 = 'Yes', 1, 0) + 
     IF(Analysis41 = 'Yes', 1, 0) + 
     IF(Analysis42 = 'Yes', 1, 0) + 
     IF(Analysis43 = 'Yes', 1, 0) + 
     IF(Analysis44 = 'Yes', 1, 0) + 
     IF(Analysis45 = 'Yes', 1, 0) + 
     IF(Analysis46 = 'Yes', 1, 0) + 
     IF(Analysis47 = 'Yes', 1, 0) + 
     IF(Analysis48 = 'Yes', 1, 0) AS YesCnt, 
     IF(Analysis1 = 'No', 1, 0) + 
     IF(Analysis2 = 'No', 1, 0) + 
     IF(Analysis3 = 'No', 1, 0) + 
     IF(Analysis4 = 'No', 1, 0) + 
     IF(Analysis5 = 'No', 1, 0) + 
     IF(Analysis6 = 'No', 1, 0) + 
     IF(Analysis7 = 'No', 1, 0) + 
     IF(Analysis8 = 'No', 1, 0) + 
     IF(Analysis9 = 'No', 1, 0) + 
     IF(Analysis10 = 'No', 1, 0) + 
     IF(Analysis11 = 'No', 1, 0) + 
     IF(Analysis12 = 'No', 1, 0) + 
     IF(Analysis13 = 'No', 1, 0) + 
     IF(Analysis14 = 'No', 1, 0) + 
     IF(Analysis15 = 'No', 1, 0) + 
     IF(Analysis16 = 'No', 1, 0) + 
     IF(Analysis17 = 'No', 1, 0) + 
     IF(Analysis18 = 'No', 1, 0) + 
     IF(Analysis19 = 'No', 1, 0) + 
     IF(Analysis20 = 'No', 1, 0) + 
     IF(Analysis21 = 'No', 1, 0) + 
     IF(Analysis22 = 'No', 1, 0) + 
     IF(Analysis23 = 'No', 1, 0) + 
     IF(Analysis24 = 'No', 1, 0) + 
     IF(Analysis25 = 'No', 1, 0) + 
     IF(Analysis26 = 'No', 1, 0) + 
     IF(Analysis27 = 'No', 1, 0) + 
     IF(Analysis28 = 'No', 1, 0) + 
     IF(Analysis29 = 'No', 1, 0) + 
     IF(Analysis30 = 'No', 1, 0) + 
     IF(Analysis31 = 'No', 1, 0) + 
     IF(Analysis32 = 'No', 1, 0) + 
     IF(Analysis33 = 'No', 1, 0) + 
     IF(Analysis34 = 'No', 1, 0) + 
     IF(Analysis35 = 'No', 1, 0) + 
     IF(Analysis36 = 'No', 1, 0) + 
     IF(Analysis37 = 'No', 1, 0) + 
     IF(Analysis38 = 'No', 1, 0) + 
     IF(Analysis39 = 'No', 1, 0) + 
     IF(Analysis40 = 'No', 1, 0) + 
     IF(Analysis41 = 'No', 1, 0) + 
     IF(Analysis42 = 'No', 1, 0) + 
     IF(Analysis43 = 'No', 1, 0) + 
     IF(Analysis44 = 'No', 1, 0) + 
     IF(Analysis45 = 'No', 1, 0) + 
     IF(Analysis46 = 'No', 1, 0) + 
     IF(Analysis47 = 'No', 1, 0) + 
     IF(Analysis48 = 'No', 1, 0) AS NoCnt 
FROM iv_checklist 

如果數據庫是更好的設計,與這些列,每列作爲一個單獨的表中的行那麼這將是非常簡單和快速的事情。

+1

這確實是很有趣打字)) – georg 2014-11-06 09:53:48

+0

不會打字太多,太懶惰!寫一行,複製10次,得到1到10個版本。然後複製這10行5次,只需添加十位數字即可。然後複製/粘貼全部'No'並選擇它,並在選擇中將'yes'更改爲'no'。 – Kickstart 2014-11-06 09:55:53

0

考慮下表

id  answer  
------------ 
1  YES 
2  NO 
3  YES 

查詢將是..

select sum(if(answer='YES',1,0))as yes, 
sum(if(answer='NO',1,0))as no from test; 

你會得到像下面

+------+------+ 
| yes | no | 
+------+------+ 
| 5 | 1 | 
+------+------+ 

如果你想要得到的結果行的答案按行申請分組查詢..

select id,sum(if(answer='YES',1,0))as yes, 
sum(if(answer='NO',1,0))as no from test group by id; 

那麼結果將是

+------+------+ 
| yes | no | 
+------+------+ 
| 2 | 0 | 
| 2 | 0 | 
| 1 | 1 | 
+0

請讓我知道它是否按預期工作... – vipin 2014-11-06 10:05:30

相關問題