如何将空行转换为0并使用DB2对整个列求和?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将空行转换为0并使用DB2对整个列求和?相关的知识,希望对你有一定的参考价值。


我使用以下查询来对整个列求和。在TOREMOVEALLPRIV列中,我有整数和空值。我想将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;

输出图像:

Column image

预期的输出量:

而不是null我需要打印具有整数的行的总和。

答案

SUM函数会自动为您处理。你说这个专栏混合了NULL和数字; SUM会自动忽略NULL值并正确返回数字的总和。你可以在IBM Knowledge Center上阅读:

该函数通过消除空值应用于从参数值派生的值集。

注意:除NULL函数外,所有聚合函数都忽略COUNT值。示例:如果您有两个值为5NULL的记录,则SUMAVG函数都将返回5,但COUNT函数将返回2

但是,你似乎误解了为什么你得到NULL的结果。这是坚果,因为该列包含null值,这是因为没有选择记录。当SUM函数返回NULL时,这是唯一的情况。如果要在这种情况下返回零,可以使用COALESCEIFNULL函数。这两种情况都是相同的:

COALESCE(sum(URT.TO_REMOVEALLPRIV), 0) as TO_REMOVEALLPRIV_SUM

要么

IFNULL(sum(URT.TO_REMOVEALLPRIV), 0) as TO_REMOVEALLPRIV_SUM

我猜你想对查询中的所有其他列做同样的事情,所以我不确定为什么你只抱怨TO_REMOVEALLPRIV列。

另一答案

您正在寻找的是COALESCE功能:

 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;

以上是关于如何将空行转换为0并使用DB2对整个列求和?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 DB2 触发器转换为 SQL Server?

使用多列分组,然后使用方法语法对特定列求和

如何在 DB2 中将 varchar 转换为时间戳

算术溢出或其他算术异常发生的解决方案?

DB2 TRIM 000000 到 0

如何对整数字符串数组求和?