SQL运算中的空值处理技巧

我们在SQL中计算N列数值的求和,有时遇到某列中存在空值,空值null非数值,不参与数值计算,由此导致计算结果出错,下面我们看一个例子。

原数据表如下:

ID姓名身份证号码联系电话分值1分值2分值3分值4
F001A006李一ABCDEF198702010031156093312070.30.10.20.4
F001A007李二ABCDEF198802050036156093312080.30.1null0.4
F001A008李三ABCDEF19890301002515609331209null0.1null0.4
I001A001张一ABCDEF19720215001413909331111null0.10.20.4
I001A002张二ABCDEF19731106005413909331112nullnull0.20.4
I001A003张三ABCDEF197410030011139093311130.30.10.2null
I001A004张四ABCDEF19750806003513909331114nullnull0.2null
I001A005张五ABCDEF197609100018139093311150.4null0.2null

SQL查询代码如下:

SELECT
	ID,
	姓名,
	身份证号码,
	联系电话,
	户籍地,
	住址,
	(分值1 + 分值2 + 分值3 + 分值4 ) AS 总分 
FROM
	模拟表;

查询结果如下:

ID姓名身份证号码联系电话总分
F001A006李一ABCDEF198702010031156093312071
F001A007李二ABCDEF19880205003615609331208null
F001A008李三ABCDEF19890301002515609331209null
I001A001张一ABCDEF19720215001413909331111null
I001A002张二ABCDEF19731106005413909331112null
I001A003张三ABCDEF19741003001113909331113null
I001A004张四ABCDEF19750806003513909331114null
I001A005张五ABCDEF19760910001813909331115null

我们可以看到分值1,分值2,分值3,三个列中存在空值,导致运算结果为NULL。

解决以上问题可以使用COALESCE()和ROUND()这两个SQL函数。

COALESCE()函数会检查第一个参数是否为空,如果为空,则返回第二个参数的值,否则返回第一个参数的值。同时它还允许你指定多个可能的替代值。

ROUND()函数是SQL中的一个内置函数,用于四舍五入数字到指定的小数位数。

以上SQL查询语句可以写成如下:

SELECT
	ID,
	姓名,
	身份证号码,
	联系电话,
	户籍地,
	住址,
	ROUND((
			COALESCE (分值1, 0 ) + COALESCE (分值2, 0 ) + COALESCE (分值3, 0 ) + COALESCE (分值4, 0 )),
		2 
	) AS 总分 
FROM
	模拟表;

以上SQL查询语句外层嵌套使用了ROUND()函数,计算结果保留小数点后2位,内层的COALESCE()函数,首先检测分值1、分值2、分值3、分值4列是否存在空值,如果 存在空值则将其替换为数值0,最后计算结果。

新的查询结果如下:

ID姓名身份证号码联系电话总分
F001A006李一ABCDEF198702010031156093312071
F001A007李二ABCDEF198802050036156093312080.8
F001A008李三ABCDEF198903010025156093312090.5
I001A001张一ABCDEF197202150014139093311110.7
I001A002张二ABCDEF197311060054139093311120.6
I001A003张三ABCDEF197410030011139093311130.6
I001A004张四ABCDEF197508060035139093311140.2
I001A005张五ABCDEF197609100018139093311150.6
     

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值