最近在读Clickhouse的官方文档,顺便记录下.

Divide by zero
在编程语言中遇到除数为0的情况有的抛出异常,比如在Java中:

> java.lang.ArithmeticException: / by zero

也有的会返回Infinity(无穷大),比如在JavaScript中:

> 1/0
Infinity

在Clickhouse中如果除数为0会返回Infinite,被除数为0时会返回NaN

edee83c425b9 :) select 1/0

SELECT 1 / 0

┌─divide(1, 0)─┐
│          inf │
└──────────────┘

1 rows in set. Elapsed: 0.320 sec.

edee83c425b9 :) select 0/0

SELECT 0 / 0

┌─divide(0, 0)─┐
│          nan │
└──────────────┘

1 rows in set. Elapsed: 0.003 sec.

edee83c425b9 :) select 0/1

SELECT 0 / 1

┌─divide(0, 1)─┐
│            0 │
└──────────────┘

1 rows in set. Elapsed: 0.001 sec.

跟JavaScript处理方式类似。

在SQL中求占比时,有时候需要考虑到总数为0的情况,可以使用isInfinite和if函数处理下:

edee83c425b9 :) select isInfinite(1/0)

SELECT isInfinite(1 / 0)

┌─isInfinite(divide(1, 0))─┐
│                        1 │
└──────────────────────────┘

1 rows in set. Elapsed: 0.003 sec.

edee83c425b9 :) select isInfinite(0/0)

SELECT isInfinite(0 / 0)

┌─isInfinite(divide(0, 0))─┐
│                        0 │
└──────────────────────────┘

1 rows in set. Elapsed: 0.001 sec.

edee83c425b9 :) select isInfinite(0/1)

SELECT isInfinite(0 / 1)

┌─isInfinite(divide(0, 1))─┐
│                        0 │
└──────────────────────────┘

1 rows in set. Elapsed: 0.003 sec.

isInfinite(x):如果X是Infinity返回1,其它值都返回零.

再加上if函数判断sql就有点长了。在实际应用中还有个技巧就是在分母上加个比较小的数:

edee83c425b9 :) select 1/(0+0.001)

SELECT 1 / (0 + 0.001)

┌─divide(1, plus(0, 0.001))─┐
│                      1000 │
└───────────────────────────┘

这样就可以避免除数为零的情况写起来也简单,但要考虑实际业务场景是否允许误差。

Clickhouse除数为0相关推荐

  1. clickhouse除数为0时报错

    select "分配下达" / "安排" AS "分配下达进度" from zhida.bb_mid_zd_district ; 正常这么写 ...

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

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

  3. java.lang.NumberFormatException: Infinite or NaN原因之浮点类型除数为0

    java.lang.NumberFormatException: Infinite or NaN原因之浮点类型除数为0 啊啊啊啊啊啊啊啊啊啊,看来用不到的东西你永远不知道在代码中会遇到什么奇葩问题.

  4. 观察0号中断:除数为0

    MOV AX,1 MOV BX,0 DIV BX 调试观察,除数为0转而处理中断处理程序 0000:0000保存着0号中断的IP和CS 显示???是因为微软没公布对应的汇编语言 观察到IF = 0为D ...

  5. java_异常_练习题:处理输入非数字异常和除数为0的异常。

    异常练习题: >>>>>需通过控制台接收用户输入的两个整数,然后做除法.要求用异常处理输入非数字的异常,和除数为0的异常. public class Test5 {// ...

  6. mysql 除数为0显示100,保留两位小数,显示百分号的相关操作

    1.处理除数为0: 使用if函数,具体语法:IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3 eg:if ...

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

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

  8. 整数运算和浮点数运算中除数为0的区别

    整数运算和浮点数运算中除数为0的区别: 整数中除数为0:int d4 = 1 / 0: ​ 报错:Exception in thread "main" java.lang.Arit ...

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

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

  10. matlab除数为0的解决办法

    1.0 - u(1)/(u(2) + (u(2)==0)*eps) 是matlab中自带例程ABS中计算滑移率的一个公式. 关于它是什么意思: 先从中间读起,u(2)=0若为真,返回u(2)==0为1 ...

最新文章

  1. Centos6.5配置DNS的主从服务器
  2. Activiti源码 ProcessEngineConfiguration
  3. java 2_Java(二)
  4. C++primer第八章 IO库 8.2 文件输入输出
  5. 你一直想学的 RocketMQ,原来这样学才最省时省力
  6. 和华为杯_2020华为手机杯围甲联赛圆满闭幕 助力围棋文化推广
  7. java filter param_Java过滤器Filter使用详解
  8. pytorch中的反卷积的output_padding参数
  9. 操作系统——概念、功能、特征及发展分类
  10. dll文件懒加载_模块已加载,但对dllregisterServer的调用失败
  11. R语言和医学统计学(11):球形检验
  12. Markdown pad2 使用本地图片
  13. 5款宝藏浏览器插件推荐,每一个都真香,一定要看到最后
  14. python安装pillow报错
  15. 如何在云服务器粘贴文件,云服务器粘贴文件
  16. shell获取当前系统时间
  17. 5.4 成员变量的隐藏和方法重写
  18. 2012年第三届C/C++ B组蓝桥杯省赛真题
  19. 工信部叫停苹果 Callkit,微信不能直接接听视频了
  20. 打开.jmx文件时报错:CannotResolveClassException

热门文章

  1. 记2012.12.20北京CISSP考试通过-“末日”前终于拿到“船票”
  2. 如何批量打印dwf文件
  3. java.lang.RuntimeException
  4. 英特尔cpu发布时间表_英特尔延长CPU发布周期:摩尔定律终结
  5. macd底背离的python_Python量化交易之MACD#39;顶底背离#39;形态的实现,自动化交易!...
  6. CS5216|DP转HDMI方案详解|分辨率1080P
  7. 安装配置磁盘阵列SAN存储系统
  8. [perl.mak] Error 2
  9. Makefile:14: config-host.mak: No such file or directory
  10. IMDb站点起诉加州限制演员年龄信息披露法案的有效性