count

返回记录条数。

 

SELECT count() FROM table

注:如果求 COUNT(DISTINCT x) ,则使用 uniq 函数

any(x)

返回遇到的第一个值

备注:待补充

anyHeavy(x)

通过 heavy hitters 算法,得到一个经常出现的值.

示例

 

SELECT anyHeavy(AirlineID) AS res FROM ontime

anyLast(x)

返回最后遇到的值

min(x)

返回最小值

max(x)

返回最大值

argMin(arg,val)

TBD

argMax(arg,val)

TBD

sum(x)

求和

仅对数值有效

sumWithOverflow(x)

求和

如果超过上限,则报错

sumMap(key,value)

对于相同的 key,对其 value 求和

示例

输入

 

CREATE TABLE sum_map( date Date, timeslot DateTime, statusMap Nested( status UInt16, requests UInt64 ) ) ENGINE = Log; INSERT INTO sum_map VALUES ('2000-01-01', '2000-01-01 00:00:00', [1, 2, 3], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:00:00', [3, 4, 5], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:01:00', [4, 5, 6], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:01:00', [6, 7, 8], [10, 10, 10]); SELECT timeslot, sumMap(statusMap.status, statusMap.requests) FROM sum_map GROUP BY timeslot

查询

 

┌────────────timeslot─┬─sumMap(statusMap.status, statusMap.requests)─┐ │ 2000-01-01 00:00:00 │ ([1,2,3,4,5],[10,10,20,10,10]) │ │ 2000-01-01 00:01:00 │ ([4,5,6,7,8],[10,10,20,10,10]) │ └─────────────────────┴──────────────────────────────────────────────┘

avg(x)

平均值

uniq(x)

求近似的排重值, 适用于数值,字符串,日期,日期时间,以及 multiple 和 tuple 参数

使用了自适合抽样算法:在 65535 下非常准确和高效。

uniqCombined(x)

求近似的排重值,适用于数值,字符串,日期,日期时间,以及 multiple 和 tuple 参数

使用了组合的三个算法:数组,hash 表和 HyperLogLog 表。

内存消耗比 uniq 要小几倍,同时精度高几倍,但是性能一般比 uniq 慢,虽然有时也会快。最大支持到 96KiB 个状态.

uniqHLL12(x)

使用 HyperLogLog 算法来做排重值的近似计算,支持 2.5KB 个状态.

uniqExact(x)

计算精确的排重值.

groupArray(x), groupArray(max_size)(x)

创建一个数组值

我自己的示例

 

:) select str_nest.y from schema_nested; SELECT str_nest.y FROM schema_nested ┌─str_nest.y───────────────┐ │ ['search','mock1@a.com'] │ │ ['image','mock1@a.com'] │ │ ['video','mock2@a.com'] │ │ ['image','mock2@a.com'] │ └──────────────────────────┘ ┌─str_nest.y──────────────────────────────┐ │ ['search','mock1@a.com','news'] │ │ ['image','mock1@a.com','search','news'] │ └─────────────────────────────────────────┘ ┌─str_nest.y─────────────────────────────┐ │ ['video','mock2@a.com'] │ │ ['image','mock2@a.com','music','news'] │ └────────────────────────────────────────┘ 8 rows in set. Elapsed: 0.003 sec.

 

:) select groupArray(str_nest.y) from schema_nested SELECT groupArray(str_nest.y) FROM schema_nested ┌─groupArray(str_nest.y)────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ [['search','mock1@a.com'],['image','mock1@a.com'],['video','mock2@a.com'],['image','mock2@a.com'],['search','mock1@a.com','news'],['image','mock1@a.com','search','news'],['video','mock2@a.com'],['image','mock2@a.com','music','news']] │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.003 sec.

 

:) select groupArray(3)(str_nest.y) from schema_nested SELECT groupArray(3)(str_nest.y) FROM schema_nested ┌─groupArray(3)(str_nest.y)──────────────────────────────────────────────────┐ │ [['search','mock1@a.com'],['image','mock1@a.com'],['video','mock2@a.com']] │ └────────────────────────────────────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.002 sec.

groupArrayInsertAt

TBD

groupUniqArray(x)

生成排重的数组,内存消耗与 uniqExact 方法相同

 

:) select groupUniqArray(str_nest.y) from schema_nested SELECT groupUniqArray(str_nest.y) FROM schema_nested ┌─groupUniqArray(str_nest.y)────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ [['image','mock2@a.com','music','news'],['image','mock1@a.com'],['image','mock2@a.com'],['video','mock2@a.com'],['image','mock1@a.com','search','news'],['search','mock1@a.com'],['search','mock1@a.com','news']] │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.004 sec.

quantile(level)(x)

估算百分位点值.

level 是一个 0 至 1 之间的常数,但是不要为 0 或者 1. 0 或者 1 时,使用 min,max 方法最合适.

quantileDeterministic(level)(x, determinator)

TBD

quantileTiming(level)(x)

TBD

quantileTimingWeighted(level)(x, weight)

TBD

quantileExact(level)(x)

TBD

quantileExactWeighted(level)(x, weight)

TBD

quantileTDigest(level)(x)

TBD

median

求中位数

每一个百分位点方法,都对应着一个求中位数的方法,如

median , medianDeterministic , medianTiming , medianTimingWeighted , medianExact , medianExactWeighted , medianTDigest

quantiles(level1, level2, ...)(x)

求多个百分位点

也对应着一系列的方法 quantiles , quantilesDeterministic , quantilesTiming , quantilesTimingWeighted , quantilesExact , quantilesExactWeighted , quantilesTDigest

varSamp(x)

求方差,结果是随机变量的方差的无偏估计

varPop(x)

求总体方差

stddevSamp(x)

varSamp(x) 的平均根

stddevPop(x)

varPop(x) 的平均根

topK

使用了 Filtered Space-Saving 算法来计算 topK

同时使用了 Parallel Space Saving 算法来进行 reduce and combine.

topK(N)(column)

 

:) select topK(3)(str_nest.y) from schema_nested SELECT topK(3)(str_nest.y) FROM schema_nested ┌─topK(3)(str_nest.y)────────────────────────────────────────────────────────┐ │ [['video','mock2@a.com'],['search','mock1@a.com'],['image','mock1@a.com']] │ └────────────────────────────────────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.004 sec.

covarSamp(x,y)

计算协方差

covarPop(x,y)

计算总体协方差

corr(x,y)

计算 Pearson 相关系数

含参聚合函数

学习自 官方文档

sequenceMatch(pattern)(time, cond1, cond2, ...)

按顺利先后匹配事件

  • pattern: 类似正则表达式的匹配规则
  • time: 事件发生时间
  • cond1, cond2: 最多 32 个,来标识条件是否满足

返回值

  • 0:不匹配
  • 1: 匹配

示例

 

sequenceMatch ('(?1).*(?2)')(EventTime, URL LIKE '%company%', URL LIKE '%cart%')

是否存在事件链,即先访问了 company 的事件,再访问了 cart 的事件

也可以通过别的聚合方法来表示

 

minIf(EventTime, URL LIKE '%company%') < maxIf(EventTime, URL LIKE '%cart%')

sequenceCount(pattern)(time, cond1, cond2, ...)

逻辑与 sequenceMatch 函数一样,但是返回值为 chain 的编号.

TBD

uniqUpTo(N)(x)

返回 N 个排重值数目,如果实际值大于 N,则返回 N+1

聚合函数后缀

-If

任何聚合函数都可以通过增加后缀 If, 来增加一个外部参数条件. 聚合函数仅处理满足条件的记录行. 如果条件一次也没有触发,则返回默认值(通常是 0 或者是空字符串)

这样可以一次处理多个聚合条件,而不需要转换为子查询或者 JOIN 来计算.

示例

sumIf(column, cond) , countIf(cond) , avgIf(x, cond) , quantilesTimingIf(level1, level2)(x, cond) , argMinIf(arg, val, cond)

-Array

任何聚合函数都可以通过增加后缀 Array, 来使原来的参数类型 T 变为新的参数类型 Array(T)。

在处理时,原来的聚合函数会依次处理 Array 中的每一项.

示例

sumArray(arr) : 对 Arrays 中的所有元素进行求和,即 sum(arraySum(arr))

uniqArray(arr) : 对 Arrays 中的所有元素进行排重值,即 uniq(arrayJoin(arr))

-If-Array 可以组合使用,但是 Array 必须在前, If 在后。例如

uniqArrayIf(arr, cond)

quantilesTimingArrayIf(level1, level2)(arr, cond)

-State

返回的不是结果值,返回的是中间状态. 这个是与 AggregatingMergeTree 来配合使用的.

-Merge

聚合函数会把中间状态会为参数,进行 Merge,来完成聚合,返回最终的结果值.

-MergeState

-Merge 类似,但是返回的不是结果值,而是类似于 -State 的中间状态.

-ForEach

将对 table 使用的聚合函数,转换为对数组的聚合函数。对数组的每一项进行处理,返回一个结果数组。

如:

sumForEach([1,2],[3,4,5],[6,7])

结果为

[10,13,5]

ClickHouse 聚合函数相关推荐

  1. 【ClickHouse 技术系列】- ClickHouse 聚合函数和聚合状态

    简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被国 ...

  2. ClickHouse 聚合函数的执行过程

    基本的概念 Block:数据块,ClickHouse进行数据读.写的基本单元,每一个Block实例,不仅包含数据域,还包含了每个列的meta信息. Chunk:数据块,保存实际数据的单元,Block中 ...

  3. clickhouse聚合函数之groupBitmap

    用途 官方点就是计算基数,直白点就是统计不重复的个数 参数为Uint类型,就是不是负数的整数 返回值为Uint64类型 案例 测试数据 UserID 1 1 2 3 SELECT groupBitma ...

  4. clickhouse 常用函数 算数函数 时间函数 日期函数 字符串函数 比较函数 数据类型函数 逻辑函数 类型转换函数 替换函数 数组函数 随机函数 编码函数 UUID URL IP 函数

    clickhouse 常用函数 算数函数 时间函数 日期函数 字符串函数 比较函数 数据类型函数 逻辑函数 类型转换函数 替换函数 数组函数 随机函数 编码函数 UUID URL IP 函数 算数函数 ...

  5. 【用户画像】Clickhouse位图函数实践总结

    文章目录 1 位图概念 2 位图函数 2.1 位图函数作用 2.2 位图函数构造方法 2.3 位图函数的基本分类 2.4 位图函数基本使用 2.4.1 数据准备 2.4.2 构造位图 2.4.2.1 ...

  6. TSQL 聚合函数忽略NULL值

    max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...

  7. Oracle 聚合函数(Aggregate Functions)说明

    Oracle Aggregate Functions用过很多,官网的说明如下: Aggregate Functions http://docs.oracle.com/cd/E11882_01/serv ...

  8. MySQL数据库聚合函数(count、max、min、sum、avg)

    1. 聚合函数的介绍 聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据. 常用的聚合函数: count(col): 表示求指定列的总 ...

  9. Spark:group by和聚合函数使用

    groupBy分组和使用agg聚合函数demo: df.show +----+-----+---+ |YEAR|MONTH|NUM| +----+-----+---+ |2017| 1| 10| |2 ...

最新文章

  1. AndroidUI的组成部分RoomButton
  2. CSS父级子级学习总结
  3. bilibili怎么设置弹幕数量_python爬虫:bilibili弹幕爬取+词云生成
  4. 10个精选的颜色选择器Javascript脚本及其jQuery插件
  5. 【渝粤题库】陕西师范大学210019 学前教育科研方法 作业(专升本)
  6. Java案例:Swing摇奖器
  7. php中如何实现多进程
  8. Django之模型层
  9. 收拾了一下书架,感觉还是像破烂货市场一样
  10. 苹果Mac 3D 建模渲染软件:Vectorworks
  11. java 动态性之反射机制 详解 案例,java架构师技术图谱
  12. 学生上课睡觉班主任怎么处理_学生上课睡觉,老师该怎么处理?
  13. Django使用supervisor管理celery和uwsgi实践记录 uwsgi BACKOFF Exited too quickly (process log may have details)
  14. 暗影精灵2pro装Linux系统,暗影精灵2不支持linux双系统吗?
  15. 一步一步做高性能服务器(C++) -- Day 0
  16. Uber无模式数据存储
  17. Java JCEF集成Chromium
  18. 修改自带input样式input:-internal-autofill-selected为透明色
  19. dad my_经典绘本| My Dad
  20. 聊聊最简单的名词:频率

热门文章

  1. 第十三章 枚举类和注解
  2. 我女朋友觉得这个标题土,我觉得很贴合中心思想啊!---- 人工智能的前世今生(完结篇)
  3. springmvc返回JSP源码
  4. 批处理获取服务器目录文件是否存在,批处理教程:获取批处理文件所在路径
  5. HTML CSS 程序员花式表白
  6. 短视频程序源码,如何实现短视频的热门页面
  7. 就业天花板?33% 程序员月薪达到 5 万元以上
  8. 即时通讯原理-Instant Messenger
  9. igmp snooping v1/v2/v3
  10. 尝试制作淘宝的注册协议