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

简介: SQL数据库开发

问题

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

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


解决办法

情况一

例如  

    SELECT  A/B  FROM TAB

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

    50.png

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


    情况二

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

    例如

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


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


      51.png

      其中这里使用了两个函数,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的情况了,一定要记得哦~

      相关文章
      |
      7月前
      |
      SQL 关系型数据库 数据库
      实时计算 Flink版操作报错之使用SQL 将 PostgreSQL 的 date 类型字段转换为 TIMESTAMP 类型时遇到报错,该如何处理
      在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
      |
      5月前
      |
      SQL 存储 数据库
      MySQL设计规约问题之如何处理日志类型的表
      MySQL设计规约问题之如何处理日志类型的表
      SQL如何处理这几个常见问题(二)
      SQL在使用过程中,经常会遇到一些奇奇怪怪的小问题,今天给大家总结一下常见的几个问题该如何处理。
      SQL如何处理这几个常见问题(二)
      SQL如何处理这几个常见问题(一)
      SQL在使用过程中,经常会遇到一些奇奇怪怪的小问题,今天给大家总结一下常见的几个问题该如何处理。
      SQL如何处理这几个常见问题(一)
      |
      SQL 关系型数据库 MySQL
      MySQL实战干货 | 如何处理由时区设置引发的 SQL 执行“卡顿”?
      小小不起眼的时区设置也能成为高并发场景的性能杀手,让我们一起来看一下其是如何发生,又如何能够避免的
      1254 0
      MySQL实战干货 | 如何处理由时区设置引发的 SQL 执行“卡顿”?