ClickHouse常用高阶函数

在这里插入图片描述

一、去重

1.arrayDistinct

对数组进行去重

SELECT arrayDistinct( [1,2,3,6,34,3,11])
2.arrayUniq

计算数组中有多少个不重复的值

SELECT arrayUniq( [1,2,3,6,34,3,11])
3.arrayCompact

对数组内数据实现相邻去重

SELECT arrayCompact([1, 2, 2, 3, 2, 3, 3])

二、数组属性

1.arrayJoin

对数组进行展开操作,行变列

SELECT arrayJoin( [1,2,3,6,34,3,11] ) as a
2.arrayFilter

筛选出数组中满足条件的数据

SELECT a from (SELECT arrayFilter(x->x%2=0, [1,2,3,6,34,3,11]) as a
3.arrayEnumerate

返回数组下标

SELECT arrayEnumerate([1,2,3,6,34,3,11])
4.arrayReduce

对数组进行聚合操作,如有min 、max、avg 等

SELECT arrayReduce('avg', [1,2,3,6,34,3,11] )
5.arrayEnumerateDense

标记出数组中相同的元素

SELECT arrayEnumerateDense( [1,2,3,6,34,3,11] )
6.hasAny

判断数组中是否包含某些值中任意一个值,若包含则返回1,否则返回0

SELECT hasAny( [1,2,3,6,34,3,11] , [3,4])
7.hasAll

判断数组中是否包含某些值中所有值,若包含则返回1,否则返回0

SELECT hasAll( [1,2,3,6,34,3,11] , [3,4])
8.arrayWithConstant

生成一个指定长度的数组

SELECT arrayWithConstant( 3, 'a')

三、切割/拼接

1.arrayStringConcat

将数组元素按照给定分隔符进行拼接,返回拼接后的字符串(数组元素必须为String类型)

SELECT arrayStringConcat( ['2020','12','19'], '-') 
2.arraySlice

对数组进行切割 ,后面两个参数分别是切割的位置和切割后的段数

SELECT arraySlice( [1,2,3,6,34,3,11],-3,2)

四、排序

1.arraySort

对数组进行升序

SELECT a from (SELECT arraySort([1,2,3,6,34,3,11]) as a)
2.arrayReverseSort

对数组进行降序

SELECT a from (SELECT arrayReverseSort([1,2,3,6,34,3,11]) as a)

五、添加/删除首尾元素

1.arrayPushFront

在数组首位添加元素

SELECT arrayPushFront( [1,2,3,6,34,3,11] , 8)
2.arrayPushBack

在数组末尾添加元素

SELECT arrayPushBack( [1,2,3,6,34,3,11] , 8)
3.arrayPopFront

删除数组中第一个元素

SELECT arrayPopFront( [1,2,3,6,34,3,11] )
4.arrayPopBack

删除数组中最后一个元素

SELECT arrayPopBack( [1,2,3,6,34,3,11] )

六、计算差值

1.arrayDifference

计算数组中前后两个值的差值部分,该位=当前-前者(不包括第一个数,结果第一位默认为0)

SELECT arrayDifference( [1,2,3,6,34,3,11] )
2.runningDifference

计算某一列前后数值的差值,该位=当前-前者(不包括第一个数,结果第一位默认为0)

select a,runningDifference(a)  from (SELECT arrayJoin( [1,2,3,6,34,3,11]) as a)
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值