MySQL为sum操作避免空值?

时间:2016-09-09 17:32:17

标签: mysql sql sum boolean-logic isnull

我需要创建一个列,该列计算大于0的变量数量,并且如果id中有任何非空值,则不会为id列中的每个值返回null。

我设法做的是在一些布尔运算之间使用和:

IF 'A' THEN 'B' ELSE 'C'(至少是我所得到的)

select ID, `jul`, `aug`, `set`, `oct`, `nov`, `dec`,
((((not `jul`) or 1) and (`jul` or 0)) 
+(((not `aug`) or 1) and (`aug` or 0))
+(((not `set`) or 1) and (`set` or 0))
+(((not `out`) or 1) and (`out` or 0))
+(((not `nov`) or 1) and (`nov` or 0))
+(((not `dec`) or 1) and (`dec` or 0))) as sum from table;

它适用于第一个视图,但如果一行中有任何空值,sum将为每个相应的id返回null。

我该怎么做才能避免这个问题?

3 个答案:

答案 0 :(得分:0)

您需要使用coalesce或变体来处理空值。空值表示未知。你不能添加未知数并得到一些不为人知的东西。

NULL + 1 = NULL
COALESCE(NULL, 0) + 1 = 1

答案 1 :(得分:0)

尝试

SUM( IFNULL(jul,0)+IFNULL(ago,2) ) as sum from table

/* 
   obs: the SUM is good to sum multiple values
   IFNULL returns 0 to the sum if jul is null and 2 for ago if ago is null in the example.
*/

我认为它有效。 :)

答案 2 :(得分:-1)

使用isnull(columnname, 0)将空值转换为0。所以isnull('jul',0)+isnull('aug',0)