如何使用DB2将空行转换为0并对整个列求和?
我使用以下查询对整个列求和。在如何使用DB2将空行转换为0并对整个列求和?,db2,Db2,我使用以下查询对整个列求和。在TOREMOVEALLPRIV列中,我有整数和null值 我想对null和整数值求和,并打印总和值 下面是我的查询,它将总和值打印为null: select sum(URT.PRODSYS) as URT_SUM_PRODSYS, sum(URT.Users) as URT_SUM_USERS, sum(URT.total_orphaned) as URT_SUM_TOTAL_ORPHANED, sum(URT.Bp_errors)
TOREMOVEALLPRIV
列中,我有整数和null
值
我想对null
和整数值求和,并打印总和值
下面是我的查询,它将总和值打印为null
:
select
sum(URT.PRODSYS) as URT_SUM_PRODSYS,
sum(URT.Users) as URT_SUM_USERS,
sum(URT.total_orphaned) as URT_SUM_TOTAL_ORPHANED,
sum(URT.Bp_errors) as URT_SUM_BP_ERRORS,
sum(URT.Ma_errors) as URT_SUM_MA_ERRORS,
sum(URT.Pp_errors) as URT_SUM_PP_ERRORS,
sum(URT.REQUIREURTCBN) as URT_SUM_CBNREQ,
sum(URT.REQUIREURTQEV) as URT_SUM_QEVREQ,
sum(URT.REQUIREURTPRIV) as URT_SUM_PRIVREQ,
sum(URT.cbnperf) as URT_SUM_CBNPERF,
sum(URT.qevperf) as URT_SUM_QEVPERF,
sum(URT.privperf) as URT_SUM_PRIVPERF,
sum(URT.TO_REMOVEALLPRIV) as TO_REMOVEALLPRIV_SUM
from
URTCUSTSTATUS URT
inner join CUSTOMER C on URT.customer_id=C.customer_id;
输出图像:
预期产出:
我需要打印具有整数的行的总和,而不是
null
。您要查找的是合并
函数:
select
sum(URT.PRODSYS) as URT_SUM_PRODSYS,
sum(URT.Users) as URT_SUM_USERS,
sum(URT.total_orphaned) as URT_SUM_TOTAL_ORPHANED,
sum(URT.Bp_errors) as URT_SUM_BP_ERRORS,
sum(URT.Ma_errors) as URT_SUM_MA_ERRORS,
sum(URT.Pp_errors) as URT_SUM_PP_ERRORS,
sum(URT.REQUIREURTCBN) as URT_SUM_CBNREQ,
sum(URT.REQUIREURTQEV) as URT_SUM_QEVREQ,
sum(URT.REQUIREURTPRIV) as URT_SUM_PRIVREQ,
sum(URT.cbnperf) as URT_SUM_CBNPERF,
sum(URT.qevperf) as URT_SUM_QEVPERF,
sum(URT.privperf) as URT_SUM_PRIVPERF,
sum(COALESCE(URT.TO_REMOVEALLPRIV,0)) as TO_REMOVEALLPRIV_SUM
from
URTCUSTSTATUS URT
inner join CUSTOMER C on URT.customer_id=C.customer_id;
SUM
函数会自动为您处理该问题。您说该列混合了NULL
和数字;SUM
自动忽略NULL
值,并正确返回数字的总和。您可以在以下网站上阅读:
该函数通过消除空值应用于从参数值派生的值集
注意:除了COUNT
函数外,所有聚合函数都忽略NULL
值。示例:如果有两条记录的值分别为5
和NULL
,则SUM
和AVG
函数都将返回5
,但COUNT
函数将返回2
然而,您似乎误解了为什么会得到NULL
。这不是因为列包含null
值,而是因为没有选择任何记录。这是SUM
函数返回NULL
时的唯一情况。如果在这种情况下要返回零,可以使用COALESCE
或IFNULL
函数。这两种情况都是相同的:
COALESCE(sum(URT.TO_REMOVEALLPRIV), 0) as TO_REMOVEALLPRIV_SUM
或
我猜您希望对查询中的所有其他列执行相同的操作,因此我不确定您为什么只抱怨
to_REMOVEALLPRIV
列。此代码浪费资源。SUM
函数忽略NULL
值。如果希望最终结果不为NULL
,请切换函数顺序。不必检查每个值,只需检查最终结果。有关详细信息,请参阅我的答案。
IFNULL(sum(URT.TO_REMOVEALLPRIV), 0) as TO_REMOVEALLPRIV_SUM