我有一個48列的mysql表。表中的值將是「是」或「否」。我想要從一行中得到「是」和「否」的數目。來自mysql數據庫錶行的是和否值的總數
例如:
一個具有23個是年代和25號的行,那麼就應該在前端顯示的總數
我有一個48列的mysql表。表中的值將是「是」或「否」。我想要從一行中得到「是」和「否」的數目。來自mysql數據庫錶行的是和否值的總數
例如:
一個具有23個是年代和25號的行,那麼就應該在前端顯示的總數
所以,你的表是這樣的:
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中沒有直接的方法來以每列爲基礎計算值。
格奧爾格,我會用我的數據庫表格截圖更新我的問題,那麼你可以很容易地理解什麼是要求 – user2372469 2014-11-06 09:02:10
@ user2372469:謝謝,我已經更新了答案。 – georg 2014-11-06 09:07:21
我想要從那一行中得到yes和no的總數 – user2372469 2014-11-06 09:11:13
SELECT col1 + col2 + ... + col48 as yes, * FROM table_name
我希望你的表結構會支持這個;
我從來沒有嘗試過,但我以this answer作爲參考。
編輯
忘記,如果你更改列到emun大部分代碼仍然可能會工作,而我的查詢就可以了(只要確保沒有首先在枚舉),以mention-
使用您當前的結構唯一可行的方法是檢查每列,如果選擇「是」,則添加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
如果數據庫是更好的設計,與這些列,每列作爲一個單獨的表中的行那麼這將是非常簡單和快速的事情。
考慮下表
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 |
請讓我知道它是否按預期工作... – vipin 2014-11-06 10:05:30
發表您的查詢。 – 2014-11-06 08:49:24
''''SELECT answer,count(*) FROM yourTable GROUP BY answer''''? – 2014-11-06 08:49:35
感謝您的回覆。計數應該基於該行。 – user2372469 2014-11-06 08:52:08