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

问题描述 投票:1回答:2

我使用以下查询来对整个列求和。在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我需要打印具有整数的行的总和。

db2
2个回答
1
投票

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列。


0
投票

您正在寻找的是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;
© www.soinside.com 2019 - 2024. All rights reserved.