MySQL正在计算零的总数

MySQL正在计算零的总数,mysql,Mysql,我有一张看起来像的桌子 | id | day1 | day2 | day3 | day4 | day5 | | 1 | 4 | 0 | 5 | 0 | 0 | | 2 | 2 | 0 | 0 | 4 | 1 | 我想找出每个id的零条目的总数 | id | total_zeros | | 1 | 3 | | 2 | 2 | 为什么人们坚持要制作这样不可用的桌子 您必须使用case语句,

我有一张看起来像的桌子

| id | day1 | day2 | day3 | day4 | day5 |
| 1  |  4   |  0   |  5   | 0    | 0    |
| 2  |  2   |  0   |  0   | 4    | 1    |
我想找出每个id的零条目的总数

| id | total_zeros |
| 1  | 3           |
| 2  | 2           |

为什么人们坚持要制作这样不可用的桌子

您必须使用case语句,分别计算每一列,然后将结果相加。

尝试以下方法:

select 
id, if(day1=0,1,0)+if(day2=0,1,0)+ if(day3=0,1,0)+if(day4=0,1,0)+if(day5=0,1,0) as total
from test

+1,为了使它更短,可以使用
!第1天+!第二天+…
@zerkms我想到了这一点。它更短,但我认为这更清楚。ansi也不是:-)如果我们必须从mysql迁移到只允许ansi语法的DBMS,我的网站将完全被扭曲,呵呵:-)在这种情况下,ansi的强大程度并不是那么大,但是mysql是宽容的:-)除了mysql之外,我还没有使用过其他允许这样做的DBMS(postgresql、sql server、oracle),但它没有违反正常形式(第三种形式),是吗?嗯,没有,但至少在我看来,它确实不容易查询。但我今天可能会感到不高兴。任何时候你需要像这样重复列,这是一个强烈的迹象,表明你应该使用另一个表。@Barmar:“你应该使用另一个表”-在这种情况下,你很有可能会有无休止的换位,因为这类数据通常是按照原始问题中的方式使用的。这是一个很好的观点。你必须选择你的毒药,因为mysql没有内置的pivot函数。
select 
id, if(day1=0,1,0)+if(day2=0,1,0)+ if(day3=0,1,0)+if(day4=0,1,0)+if(day5=0,1,0) as total
from test