计算考虑3列的总和

时间:2014-08-05 12:15:15

标签: mysql count sum

我有3列(prod1,prod2,prod3),TYPE:DOUBLE

id |  prod1  |  prod2  | prod3  |
1  |   1.3   |   2.6   |  2.8   |
2  |   0.8   |   3.4   |   0    |
3  |    0    |    0    |  1.3   |
4  |    0    |    0    |   0    |

我想要的是3列的COUNT()

SELECT count(prod1,prod2,prod3) AS allc 
  FROM `testprd` 
 WHERE id =3

我知道上面的代码是错误的

应该给出结果

allc
-------
 1

由于prod1prod2的值为0

同样,当id = 4计数应为0时,因为resp id的所有列的值都为零,但当id = 1时,则计数应为3

因此我教了每个id列的计数,然后总结所有,将导致我的解决方案但是无法达到它。

以下是我的尝试

SELECT count(prod1) AS a, 
       count(prod2) AS b, 
       count(prod3) AS c 
  FROM `testprd` 
 WHERE id =3

结果:

a |  b   |  c 
-------------
1    1     1

但应该是:

a |  b   |  c 
-------------
0    0     1

所以sum(a+b+c) = 1

因此id = 3的计数为1

我做错了什么?

6 个答案:

答案 0 :(得分:2)

您可以使用

获得想要的结果
SELECT  
    (prod1 !=0 ) + (prod2 != 0) + (prod3 != 0) AS allc 
FROM `testprd` 
WHERE id = 3

聚合函数COUNT计算表中的行或不计算某列中的空行,但不计算一组列中不等于零的值。

  

COUNT(表达式)

     

返回行中expr的非NULL值的数量   由SELECT语句检索。结果是BIGINT值。

     

如果没有匹配的行,COUNT()将返回0。

答案 1 :(得分:1)

使用

SELECT id, if(prod1+prod2+prod3>0,1,0) from testprd;

对于所有分隔的列,它应该是:

SELECT id, if(prod1>0,1,0), if(prod2>0,1,0), if(prod3>0,1,0) from testprd;

答案 2 :(得分:1)

使用像这样的简单查询

SELECT
    IF(prod1 > 0,1,0)+IF(prod2 > 0,1,0)+IF(prod3 > 0,1,0) as Total
FROM test
WHERE id = 3;

SQL Fiddle Demo

输出

| TOTAL |
|-------|
|     1 |

答案 3 :(得分:0)

只需检查该产品是否与零不同,然后将所有计数总和如下:

 SELECT if(prod1!=0,1,0) +  
        if(prod1!=0,1,0) +, 
        if(prod1!=0,1,0) AS ct 
   FROM `testprd` 
  WHERE id =3

答案 4 :(得分:0)

怎么样:

       SELECT 
          count(*) AS allc FROM `testprd` 
       WHERE 
          id =3 AND 
          0 < ANY (prod1, prod2, prod3);

答案 5 :(得分:0)

COUNT计算SELECT语句选择的行数,但不会对列值进行求和。

SELECT prod1 + prod2 + prod3 AS mySum 
    FROM `testprd` 
    WHERE id =3;

请参阅有关Arithmetic OperatorsCOUNT

的MySQL文档