-If
sumIf(column, cond)、countIf(cond)、avgIf(x, cond)、quantilesTimingIf(level1, level2)(x, cond)、argMinIf(arg, val, cond) 等。
借助条件聚合函数,你可以一次性计算多个条件下的聚合结果,而无需使用子查询和 JOIN。例如,条件聚合函数可用于实现分群对比功能。
-Array
-Array 后缀可以附加到任何聚合函数上。在这种情况下,聚合函数接受的参数类型是 Array(T) (数组) ,而不是 T。如果聚合函数接受多个参数,那么这些参数必须是长度相同的数组。处理数组时,聚合函数会像原始聚合函数一样,对所有数组元素进行聚合计算。
示例 1:sumArray(arr) - 对所有 arr 数组中的全部元素求和。在这个示例中,也可以写成更简单的形式:sum(arraySum(arr))。
示例 2:uniqArray(arr) – 统计所有 arr 数组中不同元素的数量。这也可以用更简单的方式实现:uniq(arrayJoin(arr)),但并不总是可以在查询中添加 arrayJoin。
-If 和 -Array 可以组合使用。不过,Array 必须在前,If 必须在后。示例:uniqArrayIf(arr, cond)、quantilesTimingArrayIf(level1, level2)(arr, cond)。由于这个顺序,cond 参数不会是数组。
-Map
-Map 后缀可以附加到任何聚合函数上。这会创建一个以 Map 类型作为参数的聚合函数,并使用指定的聚合函数分别对 map 中每个键的值进行聚合。结果也将是 Map 类型。
示例
-SimpleState
x— 聚合函数的参数。
SimpleAggregateFunction(...) 类型聚合函数的值。
示例
Query
Response
-State
uniq,即用于计算唯一值数量的哈希表) 。这是一个 AggregateFunction(...),可用于进一步处理,或存储在表中以便稍后完成聚合。
请注意,由于中间状态中的数据顺序可能发生变化,-MapState 对于同一份数据而言并不是不变的,不过这不会影响这些数据的摄取。
- AggregatingMergeTree 表引擎。
- finalizeAggregation 函数。
- runningAccumulate 函数。
- -Merge 组合器。
- -MergeState 组合器。
-Merge
-MergeState
-ForEach
[1, 2]、[3, 4, 5] 和 [6, 7],sumForEach 会将对应位置的元素相加,并返回结果 [10, 13, 5]。
-Distinct
sum(DISTINCT x) (或 sumDistinct(x)) 、groupArray(DISTINCT x) (或 groupArrayDistinct(x)) 、corrStable(DISTINCT x, y) (或 corrStableDistinct(x, y)) 等。
-OrDefault
-OrDefault 可以与其他组合器搭配使用。
语法
x— 聚合函数参数。
Query
Response
-OrDefault 也可以与其他组合器配合使用。在聚合函数不接受空输入时,这会很有用。
Query
Response
-OrNull
-OrNull 可以与其他组合器配合使用。
语法
x— 聚合函数的参数。
- 聚合函数的结果,转换为
Nullable数据类型。 - 如果没有可聚合的内容,则返回
NULL。
Nullable(aggregate function return type)。
Example
在聚合函数末尾加上 -orNull。
Query
Response
-OrNull 还可以与其他组合器结合使用。当聚合函数不接受空输入时,这会很有用。
Query
Response
-Resample
start—resampling_key值所需整个时间间隔的起始值。stop—resampling_key值所需整个时间间隔的结束值。整个时间间隔不包含stop值,即[start, stop)。step— 将整个时间间隔划分为子区间的步长。aggFunction会在每个子区间上独立执行。resampling_key— 其值用于将数据划分到各个时间间隔中的列。aggFunction_params—aggFunction的参数。
- 包含各个子区间
aggFunction结果的 Array。
people 表包含以下数据:
[30,60) 和 [60,75) 区间内的人员姓名。由于年龄用整数表示,因此对应的年龄范围就是 [30, 59] 和 [60,74]。
要将姓名聚合为数组,我们使用 groupArray 聚合函数。它接受一个参数。在本例中,该参数是 name 列。groupArrayResample 函数应使用 age 列按年龄聚合姓名。为定义所需的区间,我们向 groupArrayResample 函数传入参数 30, 75, 30。
John 不在样本中,因为他太年轻了。其他人则按指定的年龄区间分布。
现在让我们统计指定年龄区间内的总人数以及他们的平均工资。
-ArgMin
sumArgMin(column, expr)、countArgMin(expr)、avgArgMin(x, expr) 等。