每行的SUM将空值计为0.如何使mysql跳过空值?

时间:2013-06-28 19:51:27

标签: mysql null sum

嗯,每个值的值不是空的,它们是VARCHAR(30)但是是十进制形式。但是有些记录在某些领域有“NA”。我希望mysql在SUM计算中跳过这些行,当SUM使用的字段中存在“NA”时。 Mysql将所有不可计算的字段视为0.包含“NA”的字段中的0是误导性的。我正在做GROUP BY TABLE.ID

修改

  

选择

     

SUM(

     

CASE   当X> 1那么1

     

当X <-1那么2   ELSE 3

     

END

     

CASE

     

当Y> 1时1

     

当Y <-1 THEN 2

时      

ELSE 3

END)

  

AS“Col X + Y”;

     

FROM TableA   GROUP BY TableA_ID;

某些字段有时X和/或Y =“NA”。如果TableA_ID = 17时X和Y都为6,或者当其中一个为“NA”时,我得到6。

编辑(引用我对VARCHAR的评论):

  

“我尝试将我的值存储为DEC(5,2),但Excel中的一些数据在字段中有NA。我确实设置了 X DEC(5,2)NULL并尝试过将NA插入其中但仍然出现错误(不能为空)。我也尝试将默认值设置为“NA”但仍然出错(不能为空)。我将添加一个示例查询作为编辑。“

2 个答案:

答案 0 :(得分:1)

我明白了。我使用

添加了另一个WHERE子句
  

在哪里.....和(Colx IS NOT NULL或Coly IS NOT NULL或......);

如果字段值为NULL,我将值切换回DEC(3,1)并使字段为NULLable,默认值为 null 。我必须了解如何使用NULL。我在Excel中取出了'NA'并将这些字段值留空了。

答案 1 :(得分:0)

如果foo1为空或NA只将其加总为零(加法中的中性值),否则加上该值。

select sum( case when foo1  is null or foo1 = 'NA' then 0 else foo1 end) as sum, foo2
from FooTable group by foo2

select sum(foo1) from FooTable
where (foo2 <> 'NA' and foo2 is null) and (foo3 <> 'NA' or foo3 is null )
group by foo4