我有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
由于prod1
和prod2
的值为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
我做错了什么?
答案 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;
输出
| 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;
的MySQL文档