共计 785 个字符,预计需要花费 2 分钟才能阅读完成。
导读 | 我们在进行数据统计的时候,经常会遇到求百分比,环比,同比等这些需要除以某个数的情况,而如果除数为 0,数据库是会报错的。那么遇到这样的情况我们怎么处理呢? 下面我们用示例给大家讲解一下处理方法。 |
情况一
例如
SELECT A/B FROM TAB
遇到这样的情况,一般的处理方法是用 CASE WHEN 来判断 B 的值
SELECT
CASE WHEN B=0 THEN 0 ELSE A/B END
FROM TAB
这样当 B 如果是 0,我们直接赋一个值,避免 A / B 参与计算报错。
情况二
上面是一种常见的情况,但是如果遇到下面这样的聚合函数呢?
例如
SELECT SUM(A)/COUNT(B) FROM TAB
遇到这样的情况 CASE WHEN 是不能判断 COUNT(B) 的值的,因为 WHEN 后面的条件不能使用聚合函数 (语法要求),这个时候我们可以这样处理
SELECT
ISNULL(SUM(A)/NULLIF(COUNT(B),0),0)
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 的情况了,一定要记得哦!
正文完
星哥玩云-微信公众号