我有一个包含48列的mysql表。表中的值将是"是"或"不"。我希望从一行中获得“是”和“没有”的数量。
例如:
一行有23个是和25个没有,那么它应该显示前端的总数
答案 0 :(得分: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中没有直接的方法来计算每列的值。
答案 1 :(得分:0)
SELECT col1 + col2 + ... + col48 as yes, * FROM table_name
我希望你的桌面结构支持这个;
我从未尝试过,但我将this answer作为参考。
修改强>
忘记提及 - 如果你将列更改为emun,你的大部分代码可能仍然有用,我的查询就可以解决问题(只需确保枚举中没有第一个)
答案 2 :(得分: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
如果数据库设计得更好,将这些列作为一行放在一个单独的表中,那么这将非常简单快捷。
答案 3 :(得分: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 |