点击关注上方“SQL数据库开发”,

设为“置顶或星标”,第一时间送达干货

SQL专栏

SQL基础知识第二版
SQL高级知识第二版

问题

我们在进行数据统计的时候,经常会遇到求百分比,环比,同比等这些需要除以某个数的情况,而如果除数为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的情况了,一定要记得哦~

最后给大家分享我写的SQL两件套:《SQL基础知识第二版》《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。

有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行

数据前线

后台回复关键字:1024,获取一份精心整理的技术干货

后台回复关键字:进群,带你进入高手如云的交流群。

推荐阅读

  • 知乎:国家何时整治程序员的高薪现象?

  • SQL触发器实战

  • 一款SQL自动检查神器,再也不用担心SQL出错了!

  • SQL如何求解连续年份的问题?

  • SQL 语法速成手册

SQL中如何处理除数为0的情况?相关推荐

  1. SQL中除数为0处理情况演示

    情况一 例如 SELECT A/B FROM TAB 遇到这样的情况,一般的处理方法是用CASE WHEN来判断B的值 SELECT CASE WHEN B=0 THEN 0 ELSE A/B END ...

  2. LWN:内核该如何处理argc为0的情况?

    关注了就能看到更多这么棒的文章哦- Handling argc==0 in the kernel By Jonathan Corbet January 28, 2022 DeepL assisted ...

  3. mysql 除数为0_java中除数为0时出现的异常情况

    在数学中,规定被除数不能为0 那么在Java程序中一旦出现除数为0时,会出现什么情况呢: 对于除数a和被除数b (b=0), (1)如果二者均为int型(long也是int型),结果会抛出异常:jav ...

  4. spark sql 查看分区_Spark 3.0 中七个必须知道的 SQL 性能优化

    本文来自 IBM 东京研究院的高级技术人员 Kazuaki Ishizaki 博士在 Spark Summit North America 2020 的 <SQL Performance Imp ...

  5. sql如何处理null值_如何正确处理SQL中的NULL值

    sql如何处理null值 前言 (Preface) A friend who has recently started learning SQL asked me about NULL values ...

  6. oracle sql 符号,Oracle的SQL语句中如何处理‘’符号

    Oracle的SQL语句中如何处理'&'符号 在Oracle中,如果在sql中出现'&'符号,会被自动转义: 而被要求输入在&符号后跟随的字符串的值,例如: update ta ...

  7. Java连接SQL2005及SQL Server JDBC Driver 2.0中sqljdbc.jar和sqljdbc4.jar的区别

    第一.Java连接SQL2005 一.JAVA连接SQL的语句 JAVA连接SQL2000语句为: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver&q ...

  8. 如何将不同情况下的List带到SQL中进行判断操作

    简单来说就是将List传到SQL语句中进行查询操作 其实,这里将List传到SQL语句中进行查询,方法有很多,我这里只是记录我习惯用的一种方法,原因之初是因为我要判断的情况太多了,不方便全在SQL中进 ...

  9. java 除法 为0_Java中除数为0时计算报错的问题

    在数学中,规定被除数不能为0 那么在Java程序中一旦出现除数为0时,会出现什么情况呢: 对于除数a和被除数b (b=0), (1)如果二者均为int型(long也算是int型),结果会抛出异常:ja ...

  10. sql中索引不会被用到的几种情况

    转载自  sql中索引不会被用到的几种情况 1.查询谓词没有使用索引的主要边界,换句话说就是select *,可能会导致不走索引. 比如,你查询的是SELECT * FROM T WHERE Y=XX ...

最新文章

  1. java io字符输出流_【Java的IO流之文件字符输入输出流 25】
  2. python requests 发送 上传 多个文件
  3. eclipse 常见问题及解决
  4. wxWidgets:wxRibbonButtonBar类用法
  5. LeetCode 110 Balanced Binary Tree(平衡二叉树)(*)
  6. mysql 相邻记录时间差_sql 相邻2条记录时间差比较
  7. Max Sum 杭电 1003
  8. 谷歌联合 Adobe 发布 Noto 字体【免费下载】
  9. Z-Stack Home Developer's Guide—7.EZ-Mode中文翻译【Z-Stack Home 1.2.0的开发文档】
  10. toj 4615 Tetrahedrons and Spheres
  11. Pentium的指令系统(1)——Pentium的寻址方式
  12. SSH-远程登录协议
  13. ICLR 审稿人:这篇论文在标签平滑和知识蒸馏的关系上取得了重大突破!
  14. matlab中 晶闸管整流桥导通角_逆变角如何设置,matlab仿真模型作业
  15. JavaScript学习笔记(3)——JavaScript与HTML的组合方式
  16. 王者荣耀2.0代码优化版C++
  17. 游侠小秘书基本智能框架完成!!!
  18. 学习云计算前景如何?云计算成为获取人工智能主要途径
  19. [ Azure - Cloud Shell ] 微软 Azure Cloud Shell 介绍
  20. 健身网站php,基于WEB的健身网站的设计与实现

热门文章

  1. 手披云雾开鸿蒙,有关泰山的古诗比叫熟悉的古诗来回吧~
  2. SpringBoot学习心得分享
  3. Java导出Word文档的实现
  4. 基于深度学习时间序列分类研究综述[论文阅读]
  5. Android平台车牌识别开发手册
  6. python-从视频中提取音频+将音频和视频合并
  7. 如何在线压缩图片?图片太大了如何改小kb?
  8. 腾达ac5第三方固件_腾达AC9的刷固件指南
  9. 怎样设置和检测浏览器语言
  10. 清理android根目录垃圾,安卓清理君——清除手机垃圾