问题
我们在进行数据统计的时候,经常会遇到求百分比,环比,同比等这些需要除以某个数的情况,而如果除数为0,数据库是会报错的。
那么遇到这样的情况我们怎么处理呢?下面我们用示例给大家讲解一下处理方法。
解决办法
情况一
例如
SELECT A/B FROM TAB
遇到这样的情况,一般的处理方法是用CASE WHEN来判断B的值
SELECT
CASE WHEN B= THEN ELSE A/B END
FROM TAB
这样当B如果是0,我们直接赋一个值,避免A/B参与计算报错。
情况二
上面是一种常见的情况,但是如果遇到下面这样的聚合函数呢?
例如
SELECT SUM(A)/COUNT(B) FROM TAB
遇到这样的情况CASE WHEN 不好判断COUNT(B)的值的,这个时候我们可以这样处理
SELECT
ISNULL(SUM(A)/NULLIF(COUNT(B),),)
FROM TAB
其中这里使用了两个函数,NULLIF()和ISNULL()
NULLIF函数有两个参数,定义如下:
NULLIF( expression1 , expression2 )
其作用就是:如果两个指定的表达式相等,就返回NULL值。
ISNULL函数也有两个参数,定义如下:
ISNULL( expression1 , expression2 )
其作用是:如果第一个参数的结果为NULL,就返回第二个参数的值。
当COUNT(B)的结果为0时,恰好与第二个给定的参数0相等,这个时候NULLIF函数就会返回NULL,而SUM(A)在除以NULL时结果为NULL,外层使用ISNULL函数再对NULL值进行判断,这样最终结果就是0了。
这两种方法就是我们日常处理除数为0的情况了,一定要记得哦~
源码附件已经打包好上传到百度云了,大家自行下载即可~
链接: https://pan.baidu.com/s/14G-bpVthImHD4eosZUNSFA?pwd=yu27
提取码: yu27
百度云链接不稳定,随时可能会失效,大家抓紧保存哈。
如果百度云链接失效了的话,请留言告诉我,我看到后会及时更新~
开源地址
码云地址:
http://github.crmeb.net/u/defu
Github 地址:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。