背景:
业务需求需要计算两个字段相除,但是除数可能会有0的情况。
示例一:当字段B的值为0时
SELECT A/B FROM Temp
解决方案:
可以使用case…when来判断字段B的值,如下:
SELECT
CASE WHEN B=0 THEN 0 ELSE A/B END
FROM Temp
Tip:但是此种方案不适用于有聚合函数的情况~
示例二:
SELECT SUM(A)/SUM(B) FROM Temp
解决方案:
SELECT
IFNULL(SUM(A)/NULLIF(SUM(B),0),0)
FROM Temp
Tips:
其中IFNULL(expression1 , expression2),表示如果第一个参数的结果为NULL,就返回第二个参数的值。
NULLIF(expression1 , expression2),表示如果两个指定的表达式相等,就返回NULL值。
当SUM(B)的结果为0时,恰好与第二个给定的参数0相等,这个时候NULLIF函数就会返回NULL,而SUM(A)在除以NULL时结果为NULL,外层使用IFNULL函数再对NULL值进行判断,这样最终结果就是0了.
其他数据库类似,只是函数可能不一样~
评论前必须登录!
注册