我需要创建一个列,该列计算大于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。
我该怎么做才能避免这个问题?
答案 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)
等