mysql数据库表行中的yes和no值的总数

时间:2014-11-06 08:47:06

标签: php mysql

我有一个包含48列的mysql表。表中的值将是"是"或"不"。我希望从一行中获得“是”和“没有”的数量。

例如:

一行有23个是和25个没有,那么它应该显示前端的总数 enter image description here

4 个答案:

答案 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 |