Clickhouse 算术函数实战总结
Posted 扫地增
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clickhouse 算术函数实战总结相关的知识,希望对你有一定的参考价值。
文章目录
对于所有算术函数,结果类型为结果所在的最小数值类型(如果存在这样的类型)。最小数值类型是根据数值的位数,是否有符号以及是否是浮点类型而同时进行的。如果没有足够的位,则采用最高位类型。
toTypeName(operator) 查看数据类型
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
toTypeName(operator) | 返回数据的类型 ,operator的值可以是任何类型 | toTypeName(toDate(‘2018-12-24’)) | 返回 Date |
函数实例:
SELECT toTypeName(toDate('2021-05-20'));
┌─toTypeName(toDate('2021-05-20'))─┐
│ Date │
└──────────────────────────────────┘
SELECT toTypeName(0),toTypeName(0 + 0),toTypeName((0 + 0) + 0),toTypeName(((0 + 0) + 0) + 0)
┌─toTypeName(0)─┬─toTypeName(plus(0, 0))─┬─toTypeName(plus(plus(0, 0), 0))─┬─toTypeName(plus(plus(plus(0, 0), 0), 0))─┐
│ UInt8 │ UInt16 │ UInt32 │ UInt64 │
└───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘
算术函数适用于
UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64,Float32或Float64
中的任何类型。
plus(a, b) 计算数值总和
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
plus(a, b) | 计算数值总和 | plus(50,1) | 返回结果51 |
参数类型说明:
1、Date
或DateTime
与整数进行相加。在Date
的情况下,和整数相加整数意味着添加相应的天数,日期类型值和整数值没有顺序要求。
2、对于DateTime
,这意味着添加相应的秒数,时间类型值和整数值没有顺序要求。
3、当然两个参数也可以是两个整数,同样没有顺序要求。
函数实例:
localhost :) select plus(50,1), plus(1,toDate('2021-05-20')),plus(toDate('2021-05-22'),-1),plus(toDateTime('2021-05-20 16:18:20'),1),plus(-1,toDateTime('2021-05-20 16:18:20'));
SELECT
50 + 1,
1 + toDate('2021-05-20'),
toDate('2021-05-22') + -1,
toDateTime('2021-05-20 16:18:20') + 1,
-1 + toDateTime('2021-05-20 16:18:20')
Query id: 0ab418ad-5821-49df-bd6f-8456b4b3e714
┌─plus(50, 1)─┬─plus(1, toDate('2021-05-20'))─┬─plus(toDate('2021-05-22'), -1)─┬─plus(toDateTime('2021-05-20 16:18:20'), 1)─┬─plus(-1, toDateTime('2021-05-20 16:18:20'))─┐
│ 51 │ 2021-05-21 │ 2021-05-21 │ 2021-05-20 16:18:21 │ 2021-05-20 16:18:19 │
└─────────────┴───────────────────────────────┴────────────────────────────────┴────────────────────────────────────────────┴─────────────────────────────────────────────┘
1 rows in set. Elapsed: 0.006 sec.
minus(a, b) 计算数值之差
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
minus(a, b) | 计算数值之差,结果总是有符号的 | minus(10,1) | 返回结果9 |
参数类型说明:
1、Date
或DateTime
与整数进行相减。在Date
的情况下,和整数相减整数意味着减少相应的天数,日期类型值和整数值有严格顺序要求,日期类型必须为第一个参数。
2、对于DateTime
,这意味着添加相应的秒数,时间类型值和整数值有严格的顺序要求,时间类型必须为第一个参数。
3、当然两个参数也可以是两个整数,同样没有顺序要求。
函数实例:
localhost :) select minus(10,1),minus(10,-1),minus(toDate('2021-05-22'), -1),minus(toDate('2021-05-20'),1),minus(toDateTime('2021-05-20 16:18:20'), 1),minus(toDateTime('2021-05-20 16:18:20'), -1)
SELECT
10 - 1,
10 - -1,
toDate('2021-05-22') - -1,
toDate('2021-05-20') - 1,
toDateTime('2021-05-20 16:18:20') - 1,
toDateTime('2021-05-20 16:18:20') - -1
Query id: 25211a35-cd6e-4c18-a321-1223092b41d5
┌─minus(10, 1)─┬─minus(10, -1)─┬─minus(toDate('2021-05-22'), -1)─┬─minus(toDate('2021-05-20'), 1)─┬─minus(toDateTime('2021-05-20 16:18:20'), 1)─┬─minus(toDateTime('2021-05-20 16:18:20'), -1)─┐
│ 9 │ 11 │ 2021-05-23 │ 2021-05-19 │ 2021-05-20 16:18:19 │ 2021-05-20 16:18:21 │
└──────────────┴───────────────┴─────────────────────────────────┴────────────────────────────────┴─────────────────────────────────────────────┴──────────────────────────────────────────────┘
1 rows in set. Elapsed: 0.003 sec.
multiply(a, b) 计算数值的乘积
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
multiply(a, b) | 计算数值的乘积 | multiply(1, 1) | 返回结果1 |
参数类型说明:
1、a、b两个参数类型可为自然数,可以为正整数,负整数,0。
2、a、b两个参数类型可为Float32类型。
3、a、b两个参数类型可为Float64类型。
函数实例:
localhost :) select multiply(-1,-1),multiply(-1,1),multiply(0,1),multiply(1,1),multiply(-1.12,1),multiply(-1.1,1)
SELECT
-1 * -1,
-1 * 1,
0 * 1,
1 * 1,
-1.12 * 1,
-1.1 * 1
Query id: 4778679f-10e2-46b4-8e7b-db3c1dae83ae
┌─multiply(-1, -1)─┬─multiply(-1, 1)─┬─multiply(0, 1)─┬─multiply(1, 1)─┬─multiply(-1.12, 1)─┬─multiply(-1.1, 1)─┐
│ 1 │ -1 │ 0 │ 1 │ -1.12 │ -1.1 │
└──────────────────┴─────────────────┴────────────────┴────────────────┴────────────────────┴───────────────────┘
1 rows in set. Elapsed: 0.004 sec.
divide(a, b) 计算数值的商
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
divide(a, b) | 计算数值的商 ,结果类型始终是浮点类型。 | divide(1, 1) | 返回结果1 |
参数类型说明:
1、a、b
两个参数类型可为自然数,可以为正整数,负整数,0。
2、a、b
两个参数类型可为Float32类型。
3、a、b
两个参数类型可为Float64类型。
注意:
它不是整数除法。对于整数除法,请使用’intDiv’函数。当除以零时,你得到’inf’,‘- inf’或’nan’。
函数实例:
localhost :) select divide(-1,-1),divide(-1,1),divide(0,1),divide(1,1),divide(-1,1.12),divide(-1.1,1),divide(1.1, 0),divide(-1.1, 0),divide(0,0)
SELECT
-1 / -1,
-1 / 1,
0 / 1,
1 / 1,
-1 / 1.12,
-1.1 / 1,
1.1 / 0,
-1.1 / 0,
0 / 0
Query id: 475d947c-fd6f-49f2-bcc8-e80ecb19a9d6
┌─divide(-1, -1)─┬─divide(-1, 1)─┬─divide(0, 1)─┬─divide(1, 1)─┬────divide(-1, 1.12)─┬─divide(-1.1, 1)─┬─divide(1.1, 0)─┬─divide(-1.1, 0)─┬─divide(0, 0)─┐
│ 1 │ -1 │ 0 │ 1 │ -0.8928571428571428 │ -1.1 │ inf │ -inf │ nan │
└────────────────┴───────────────┴──────────────┴──────────────┴─────────────────────┴─────────────────┴────────────────┴─────────────────┴──────────────┘
1 rows in set. Elapsed: 0.003 sec.
intDiv(a,b) 计算数值的商
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
intDiv(a, b) | 计算数值的商,向下舍入取整(按绝对值),除以零或将最小负数除以-1时抛出异常。 | intDiv(1, 1) | 返回结果1 |
参数类型说明:
1、a、b
两个参数类型可为自然数,可以为正整数,负整数,0。
2、a、b
两个参数类型可为Float32类型。
3、a、b
两个参数类型可为Float64类型。
注意:
除以零或将最小负数除以-1时抛出异常。
函数实例:
localhost :) select intDiv(1,1),intDiv(-1,-1),intDiv(-1,1),intDiv(0,1),intDiv(-inf,-1),intDiv(-1,1.12),intDiv(-1,1)
SELECT
intDiv(1, 1),
intDiv(-1, -1),
intDiv(-1, 1),
intDiv(0, 1),
intDiv(-inf, -1),
intDiv(-1, 1.12),
intDiv(-1, 1)
Query id: d081081f-59e1-464a-949f-d4da676aab5d
┌─intDiv(1, 1)─┬─intDiv(-1, -1)─┬─intDiv(-1, 1)─┬─intDiv(0, 1)─┬─────intDiv(-inf, -1)─┬─intDiv(-1, 1.12)─┬─intDiv(-1, 1)─┐
│ 1 │ 1 │ -1 │ 0 │ -9223372036854775808 │ 0 │ -1 │
└──────────────┴────────────────┴───────────────┴──────────────┴──────────────────────┴──────────────────┴───────────────┘
1 rows in set. Elapsed: 0.003 sec.
intDivOrZero(a,b)
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
intDivOrZero(a, b) | 计算数值的商,向下舍入取整(按绝对值),与’intDiv’的不同之处在于它在除以零或将最小负数除以-1时返回零。 | intDivOrZero(1, 1) | 返回结果1 |
参数类型说明:
1、a、b
两个参数类型可为自然数,可以为正整数,负整数,0。
2、a、b
两个参数类型可为Float32类型。
3、a、b
两个参数类型可为Float64类型。
注意:
除以零或将最小负数除以-1时抛出异常。
函数实例:
localhost :) select intDivOrZero(1,1),intDivOrZero(-1,-1),intDivOrZero(-1,1),intDivOrZero(0,1),intDivOrZero(-inf,-1),intDivOrZero(-1,1.12),intDiv(-1,1)
SELECT
intDivOrZero(1, 1),
intDivOrZero(-1, -1),
intDivOrZero(-1, 1),
intDivOrZero(0, 1),
intDivOrZero(-inf, -1),
intDivOrZero(-1, 1.12),
intDiv(-1, 1)
Query id: ff421b79-5374-4302-8f38-4235714a0cf0
┌─intDivOrZero(1, 1)─┬─intDivOrZero(-1, -1)─┬─intDivOrZero(-1, 1)─┬─intDivOrZero(0, 1)─┬─intDivOrZero(-inf, -1)─┬─intDivOrZero(-1, 1.12)─┬─intDiv(-1, 1)─┐
│ 1 │ 1 │ -1 │ 0 │ -9223372036854775808 │ 0 │ -1 │
└────────────────────┴──────────────────────┴─────────────────────┴────────────────────┴────────────────────────┴────────────────────────┴───────────────┘
1 rows in set. Elapsed: 0.003 sec.
modulo(a, b) 计算除法后的余数。
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
modulo(a, b) | 计算除法后的余数。除以零或将最小负数除以-1时抛出异常。 | modulo(1, 1) | 返回结果0 |
参数类型说明:
1、如果参数是浮点数,则通过删除小数部分将它们预转换为整数。
2、其余部分与C++中的含义相同。截断除法用于负数。
注意:
除以零或将最小负数除以-1时抛出异常。
函数实例:
localhost :) select modulo(1,1),modulo(-1.13301,-1),modulo(-1.12,1),modulo(0,1),modulo(-inf,-1),modulo(-1,1.12),modulo(-1,1)
SELECT
1 % 1,
-1.13301 % -1,
-1.12 % 1,
0 % 1,
-inf % -1,
-1 % 1.12,
-1 % 1
Query id: 3bd0704a-8c10-4f37-b6c5-68414b76b1c1
┌─modulo(1, 1)─┬─modulo(-1.13301, -1)─┬────modulo(-1.12, 1)─┬─modulo(0, 1)─┬─modulo(-inf, -1)─┬─modulo(-1, 1.12)─┬─modulo(-1, 1)─┐
│ 0 │ -0.13301000000000007 │ -0.1200000000000001 │ 0 │ nan │ -1 │ 0 │
└──────────────┴──────────────────────┴─────────────────────┴──────────────┴──────────────────┴──────────────────┴───────────────┘
1 rows in set. Elapsed: 0.002 sec.
moduloOrZero(a, b)
函数说明:
函数 | 用途 | 举例 | 结果 |
---|---|---|---|
moduloOrZero(a, b) | 计算除法后的余数。除以零或将最小负数除以-1时抛出异常。和modulo不同之处在于,除以0时结果返回0。 | moduloOrZero(1, 1) | 返回结果0 |
函数实例:
localhost :) select moduloOrZero(1,1),moduloOrZero(-1.13301,-1),moduloOrZero(-1.12,1),moduloOrZer以上是关于Clickhouse 算术函数实战总结的主要内容,如果未能解决你的问题,请参考以下文章
《ClickHouse企业级应用:入门进阶与实战》5 ClickHouse函数
《ClickHouse企业级应用:入门进阶与实战》5 ClickHouse函数
《ClickHouse企业级应用:入门进阶与实战》6 ClickHouse SQL基础