Clickhouse除数为0
最近在读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相关推荐
- clickhouse除数为0时报错
select "分配下达" / "安排" AS "分配下达进度" from zhida.bb_mid_zd_district ; 正常这么写 ...
- SQL中除数为0处理情况演示
情况一 例如 SELECT A/B FROM TAB 遇到这样的情况,一般的处理方法是用CASE WHEN来判断B的值 SELECT CASE WHEN B=0 THEN 0 ELSE A/B END ...
- java.lang.NumberFormatException: Infinite or NaN原因之浮点类型除数为0
java.lang.NumberFormatException: Infinite or NaN原因之浮点类型除数为0 啊啊啊啊啊啊啊啊啊啊,看来用不到的东西你永远不知道在代码中会遇到什么奇葩问题.
- 观察0号中断:除数为0
MOV AX,1 MOV BX,0 DIV BX 调试观察,除数为0转而处理中断处理程序 0000:0000保存着0号中断的IP和CS 显示???是因为微软没公布对应的汇编语言 观察到IF = 0为D ...
- java_异常_练习题:处理输入非数字异常和除数为0的异常。
异常练习题: >>>>>需通过控制台接收用户输入的两个整数,然后做除法.要求用异常处理输入非数字的异常,和除数为0的异常. public class Test5 {// ...
- mysql 除数为0显示100,保留两位小数,显示百分号的相关操作
1.处理除数为0: 使用if函数,具体语法:IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3 eg:if ...
- mysql 除数为0_java中除数为0时出现的异常情况
在数学中,规定被除数不能为0 那么在Java程序中一旦出现除数为0时,会出现什么情况呢: 对于除数a和被除数b (b=0), (1)如果二者均为int型(long也是int型),结果会抛出异常:jav ...
- 整数运算和浮点数运算中除数为0的区别
整数运算和浮点数运算中除数为0的区别: 整数中除数为0:int d4 = 1 / 0: 报错:Exception in thread "main" java.lang.Arit ...
- java 除法 为0_Java中除数为0时计算报错的问题
在数学中,规定被除数不能为0 那么在Java程序中一旦出现除数为0时,会出现什么情况呢: 对于除数a和被除数b (b=0), (1)如果二者均为int型(long也算是int型),结果会抛出异常:ja ...
- matlab除数为0的解决办法
1.0 - u(1)/(u(2) + (u(2)==0)*eps) 是matlab中自带例程ABS中计算滑移率的一个公式. 关于它是什么意思: 先从中间读起,u(2)=0若为真,返回u(2)==0为1 ...
最新文章
- Centos6.5配置DNS的主从服务器
- Activiti源码 ProcessEngineConfiguration
- java 2_Java(二)
- C++primer第八章 IO库 8.2 文件输入输出
- 你一直想学的 RocketMQ,原来这样学才最省时省力
- 和华为杯_2020华为手机杯围甲联赛圆满闭幕 助力围棋文化推广
- java filter param_Java过滤器Filter使用详解
- pytorch中的反卷积的output_padding参数
- 操作系统——概念、功能、特征及发展分类
- dll文件懒加载_模块已加载,但对dllregisterServer的调用失败
- R语言和医学统计学(11):球形检验
- Markdown pad2 使用本地图片
- 5款宝藏浏览器插件推荐,每一个都真香,一定要看到最后
- python安装pillow报错
- 如何在云服务器粘贴文件,云服务器粘贴文件
- shell获取当前系统时间
- 5.4 成员变量的隐藏和方法重写
- 2012年第三届C/C++ B组蓝桥杯省赛真题
- 工信部叫停苹果 Callkit,微信不能直接接听视频了
- 打开.jmx文件时报错:CannotResolveClassException
热门文章
- 记2012.12.20北京CISSP考试通过-“末日”前终于拿到“船票”
- 如何批量打印dwf文件
- java.lang.RuntimeException
- 英特尔cpu发布时间表_英特尔延长CPU发布周期:摩尔定律终结
- macd底背离的python_Python量化交易之MACD#39;顶底背离#39;形态的实现,自动化交易!...
- CS5216|DP转HDMI方案详解|分辨率1080P
- 安装配置磁盘阵列SAN存储系统
- [perl.mak] Error 2
- Makefile:14: config-host.mak: No such file or directory
- IMDb站点起诉加州限制演员年龄信息披露法案的有效性