SQL中如何处理除数为0的情况?

运维 数据库运维
我们在进行数据统计的时候,经常会遇到求百分比,环比,同比等这些需要除以某个数的情况,而如果除数为0,数据库是会报错的。

[[418171]]

本文转载自微信公众号「SQL数据库开发」,作者丶平凡世界。转载本文请联系SQL数据库开发公众号。

问题

我们在进行数据统计的时候,经常会遇到求百分比,环比,同比等这些需要除以某个数的情况,而如果除数为0,数据库是会报错的。

那么遇到这样的情况我们怎么处理呢?下面我们用示例给大家讲解一下处理方法。

解决办法

情况一

例如

  1. SELECT  A/B  FROM TAB 

遇到这样的情况,一般的处理方法是用CASE WHEN来判断B的值

  1. SELECT  
  2. CASE WHEN B=0 THEN 0 ELSE A/B END   
  3. FROM TAB 

这样当B如果是0,我们直接赋一个值,避免A/B参与计算报错。

情况二

上面是一种常见的情况,但是如果遇到下面这样的聚合函数呢?

例如

  1. SELECT  SUM(A)/COUNT(B) FROM TAB 

遇到这样的情况CASE WHEN 是不能判断COUNT(B)的值的,因为WHEN后面的条件不能使用聚合函数(语法要求),这个时候我们可以这样处理

  1. SELECT   
  2. ISNULL(SUM(A)/NULLIF(COUNT(B),0),0)   
  3. 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的情况了,一定要记得哦!

 

责任编辑:武晓燕 来源: SQL数据库开发
相关推荐

2020-11-24 12:10:22

浏览器前端断网

2023-03-09 12:21:38

2018-11-21 12:27:21

JavaScript 货币值区域

2019-11-08 08:00:00

ASP .NETASP .NET Cocookie

2011-04-11 17:10:16

Oracle

2012-07-30 09:35:10

项目管理

2019-08-15 10:20:19

云计算技术安全

2021-03-24 10:40:26

Python垃圾语言

2011-01-21 16:27:43

NagiosSendmail

2021-12-09 09:54:02

领导者疫情情商

2010-10-22 17:22:05

sql server删

2019-12-23 10:20:12

Web图片优化前端

2021-03-01 07:31:53

消息支付高可用

2017-10-26 08:43:18

JavaScript内存处理

2021-02-02 07:52:02

CSS短内容长内容

2019-02-25 08:35:22

机器学习数据模型

2012-12-12 09:49:41

2020-12-29 09:11:33

LinuxLinux内核

2017-03-13 13:21:34

Git处理大仓库

2014-11-10 10:52:33

Go语言
点赞
收藏

51CTO技术栈公众号