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.
*/
我认为它有效。 :)
我需要创建一个列来计算大于 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.
*/
我认为它有效。 :)