MySQL 求和运算避免空值?

MySQL avoiding null values for sum operations?

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

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

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;

它在第一眼看来有效,但如果一行中有任何空值,则每个相应 ID 的 sum return 为空。

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

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

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

使用isnull(columnname, 0)将空值变成0。所以 isnull('jul',0)+isnull('aug',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.
*/

我认为它有效。 :)