嗯,每个值的值不是空的,它们是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”但仍然出错(不能为空)。我将添加一个示例查询作为编辑。“
答案 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