我有一个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