【总结卡】clickhouse数据库常用高级函数

打印 上一主题 下一主题

主题 673|帖子 673|积分 2019

一、分组聚合

1.groupArray:聚合为数组

  1. select * from tmp_20230608;
  2. 1,a,aa
  3. 1,b,bb
  4. 1,a,aa
  5. 2,a,aa
  6. 2,b,bb
  7. select id
  8. ,groupArray(type) -- 聚合为数组
  9. from tmp_20230608
  10. group by id;
  11. 2,"[a, b]"
  12. 1,"[a, b, a]"
复制代码
2.groupUniqArray:聚合为去重数组

  1. select \* from tmp\_20230608;
  2. 1,a,aa
  3. 1,b,bb
  4. 1,a,aa
  5. 2,a,aa
  6. 2,b,bb
  7. select id
  8. ,groupUniqArray(type) -- 聚合为去重数组
  9. from tmp\_20230608
  10. group by id;
  11. 2,"\[a, b]"
  12. 1,"\[a, b]"
复制代码
二、去重

1.arrayDistinct:对数组去重

  1. select arrayDistinct(\[1,2,3,1,2])
  2. \[1, 2, 3]
复制代码
2.arrayUniq:统计数组中有多少个不重复的元素

  1. select arrayUniq(\[1,2,3,1,2])
  2. 3
复制代码
3.arrayCompact:对数组中相邻元素去重

  1. select arrayCompact(\[1,2,3,3,2,1])
  2. \[1, 2, 3, 2, 1]
复制代码
三、数组属性

1.arrayJoin:将数组展开,行专列

  1. select arrayJoin(\[1,2,3])
  2. 1
  3. 2
  4. 3
复制代码
2.arrayFilter:筛选数组中的元素

  1. select arrayFilter(x -> x >= 2,\[1,2,3])
  2. \[2, 3]
复制代码
3.arrayEnumerate:返回数组下标

  1. select arrayEnumerate(\[11,22,33])
  2. \[1, 2, 3]
复制代码
4.arrayEnumerateDense:标记出数组中雷同元素

  1. select arrayEnumerateDense(\[11,22,33,22])
  2. \[1, 2, 3, 2]
复制代码
5.arrayReduce:对数组举行聚合操作,等价于arrayMin、arrayMax、arrayAvg

  1. select arrayReduce('min',\[11,22,33]),arrayMin(\[11,22,33]) -- 11,11
  2. select arrayReduce('max',\[11,22,33]),arrayMax(\[11,22,33]) -- 33,33
  3. select arrayReduce('avg',\[11,22,33]),arrayAvg(\[11,22,33]) -- 22,22
复制代码
6.hasAny:判断数组A中是否有数组B中恣意一个元素hasAny(A,B),是返回1,否返回0

  1. select hasAny(\[11,22,33,22],\[44,55]),hasAny(\[11,22,33,22],\[33,55])
  2. 0,1
复制代码
7.hasAll:判断数组A中是否有数组B中全部元素hasAll(A,B),是返回1,否返回0

  1. select hasAll(\[11,22,33,22],\[44,55]),hasAll(\[11,22,33,22],\[33,11])
  2. 0,1
复制代码
8.arrayWithConstant:用常量生成一个指定长度的数组

  1. select arrayWithConstant(5,2)
  2. \[2, 2, 2, 2, 2]
复制代码
9.has:判断数组中是否存在某元素

  1. select has(\[11,33,22,44,55],11),has(\[11,33,22,44,55],111)
  2. 1,0
复制代码
10.arrayExists:判断数组中是否存在满意条件的元素

  1. select arrayExists(x -> x \* 2 < 50,\[11,33,22,44,55]),arrayExists(x -> x \* 2 > 500,\[11,33,22,44,55]);
  2. 1,0
复制代码
11.arrayMap:按指定条件映射出新数组

  1. select arrayMap(x -> x \* 10,\[11,33,22,44,55]);
  2. \[110, 330, 220, 440, 550]
复制代码
四、切割/拼接

1.arrayStringConcat:将数组元素按照指定分隔符拼接,若未指定分隔符,默认指定空字符串

  1. select arrayStringConcat(\[1,2,3],'-')
  2. 1-2-3
复制代码
2.arraySlice:对数组举行切片,后面两个参数分别是切割起始下标和元素个数

  1. select arraySlice(\[11,22,33,44,55],2,3),arraySlice(\[11,22,33,44,55],-3,2)
  2. \[22, 33, 44],\[33, 44]
复制代码
五、排序

1.arraySort:对数组举行升序分列

  1. select arraySort(\[11,33,22,44,55])
  2. \[11, 22, 33, 44, 55]
复制代码
2.arrayReverseSort:对数组举行降序分列

  1. select arrayReverseSort()(\[11,33,22,44,55])
  2. \[55, 44, 33, 22, 11]
复制代码
六、添加/删除首尾元素

1.arrayPushFront:在数组头部添加元素

  1. select arrayPushFront()(\[11,33,22,44,55],8)
  2. \[8, 11, 33, 22, 44, 55]
复制代码
2.arrayPushBack:在数组尾部添加元素

  1. select arrayPushBack()(\[11,33,22,44,55],8)
  2. \[11, 33, 22, 44, 55, 8]
复制代码
3.arrayPopFront:删除数组头部元素

  1. select arrayPopFront()(\[11,33,22,44,55])
  2. \[33, 22, 44, 55]
复制代码
4.arrayPopBack:删除数组尾部元素

  1. select arrayPopBack()(\[11,33,22,44,55])
  2. \[11, 33, 22, 44]
复制代码
七、计算差值

1.arrayDifference:计算数组中相邻元素的差值,当前值减去前一位值(第一位不计算,默认为0)

  1. select arrayDifference()(\[11,33,22,44,55])
  2. \[0, 22, -11, 22, 11]
复制代码
2.runningDifference:计算同一列中相邻元素的差值,当前行的值减去前一行的值(第一行不计算,默认为0)

  1. select runningDifference(arrayJoin()(\[11,33,22,44,55]))
  2. 0
  3. 22
  4. \-11
  5. 22
  6. 11
复制代码
八、字段数据类型

1.toTypeName:获取表字段数据或常量的数据类型

  1. select toTypeName(CAST('2023-01-01 01:02:03' AS DateTime))
  2. DateTime
复制代码
2.toColumnTypeName:获取表字段数据或常量实际存储的类型

  1. select toColumnTypeName(CAST('2023-01-01 01:02:03' AS DateTime))
  2. Const(UInt32)
复制代码
3.defaultValueOfTypeName:获取该数据类型的默认值

  1. select defaultValueOfTypeName('Date')
  2. 1970-01-01
  3. -- 结合coalesce自动处理表中的null值
  4. select coalesce(`${column},
  5.     defaultValueOfTypeName(if(startsWith(toTypeName($`{column}), 'Nullable'),
  6.                                 substr(toTypeName(`${column}), 10,
  7.                               char_length(toTypeName($`{column})) - 10),
  8.                             toTypeName(`${column}))))
  9. from $`{table};
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表