Clickhouse小记-常用函数

本文介绍了ClickHouse数据库中常用的统计函数,包括uniqExact用于去重,arrayJoin进行数组拆分,flatten实现多维数组到一维的转换,arrayEnumerateDense获取元素位置,groupArray用于组合数组,arraySum计算数组总和,arrayElement按索引获取数组元素,hasAny和hasAll判断数组子集关系,以及时间取整函数如toDate()等。

clickhouse统计常用函数

1.uniqExact

uniqExact 去重, count(DISTINCT x) 就是uniqExact函数

SELECT count(distinct(customer_id)) FROM trade_ch WHERE user_id =$user_id;
SELECT uniqExact( customer_id) FROM trade_ch where user_id =$user_id;

2.array join

array join 将数组拆开,一行数据变成多行数据

SELECT * FROM trade_ch WHERE user_id =$user_id AND id=$id;
SELECT * FROM trade_ch final array join orders.item_num , orders.price WHERE id=$id;

3.flatten

flatten 拍平 多维数组变为一维数组

示例: [[1, 2, 3], [4, 5]] => [1, 2, 3, 4, 5]

SELECT arrayFlatten([[1, 2, 3], [4, 5]]);

4.arrayEnumerateDense

arrayEnumerateDense 返回元素所在的位置 例如:

select [98,100,60,54,96,93,93,100,52] as score,arrayEnumerateDense(score) as dence_rank
select [100,100,98,96,93,93,60,54,52] as score,arrayEnumerateDense(score) as dence_rank
select [100,100,98,96,93,93,60,54,52] as score,arrayEnumerate(score) as dence_rank

5.groupArray

将分组的内的多个值,合成一个数组

select groupArray(payment) as payments from (select payment from trade_ch final where user_id =$user_id LIMIT 10);

6.arraySum

数组累加,计算arr数组的总和

select arraySum(payments) as qiuhe from (select groupArray(payment) as payments from (select payment from trade_ch final where user_id =$user_id LIMIT 10));

7.arrayElement

从n开始的索引

从数组arr中获取索引为“n”的元素。 – n必须是任何整数类型。 数组中的索引从一开始。 支持负索引。在这种情况下,它选择从末尾开始编号的相应元素。例如,arr [-1]是数组中的最后一项。
– 如果索引超出数组的边界,则返回默认值(数字为0,字符串为空字符串等).

SELECT
arrayElement(array(10,20,3), 1), -- 10
arrayElement(array(1,20,3), 2), -- 20
arrayElement(array(1,2,30), 3), -- 30
arrayElement(array(10,20,3), 0), -- 0
arrayElement(array(10,20,3), -3), -- 10
arrayElement(array(10,20,3), -2), -- 20
arrayElement(array(10,20,3), -1);-- 3

8.hasAny (集合1,集合2)

判断数组中是否包含某些值,包含其一返回1,否则返回0

SELECT hasAny( [1,2,3,6,34,3,11] , [3,1]);
SELECT `orders.item_id` from trade_ch where hasAny(`orders.item_id`, [2171, 2174]);

9.hasAll (集合,子集)

检查一个数组是否是另一个数组的子集。是返回1,否则返回0

SELECT `orders.item_id` from trade_ch where hasAll(`orders.item_id`, [2171, 2174]);

10.时间取整

toDate()/toMonth()/toYear()

select toDate(now())
select toMonth(now())
select toYear(now())

参考文档-官网:
https://clickhouse.com/docs/zh/sql-reference/aggregate-functions/reference/grouparray/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值