DB2中如何将空值转为0并对整列求和?解决SUM返回NULL问题
解决SUM函数处理NULL值返回NULL的问题
你的问题核心在于SUM()函数在所有值都是NULL时会返回NULL,而你需要把NULL视为0来计算总和。只需要用COALESCE()(标准SQL)或者数据库特定的函数(比如MySQL的IFNULL()、SQL Server的ISNULL())将NULL值替换为0,再进行求和即可。
修改后的查询语句
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;
关键说明
COALESCE(URT.TO_REMOVEALLPRIV, 0)会检查列值:如果是NULL就返回0,否则返回原数值,这样SUM()就能正确累加所有有效数值,包括把NULL当成0计算。- 如果你使用的是MySQL,也可以用
IFNULL(URT.TO_REMOVEALLPRIV, 0),效果相同;SQL Server则用ISNULL(URT.TO_REMOVEALLPRIV, 0),COALESCE是ANSI标准,兼容性更好。 - 这个修改后,不管列里是部分NULL还是全NULL,求和结果都会是0(全NULL时)或者有效数值的总和(有整数值时),不会再返回NULL。
内容的提问来源于stack exchange,提问作者DSP
相关产品推荐
相关产品推荐

