-If
sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) 등입니다.
조건부 집계 함수를 사용하면 서브쿼리와 JOIN을 사용하지 않고도 여러 조건에 대한 집계를 한 번에 계산할 수 있습니다. 예를 들어, 조건부 집계 함수는 세그먼트 비교 기능을 구현하는 데 사용할 수 있습니다.
-Array
-Array 접미사는 모든 집계 함수에 붙일 수 있습니다. 이 경우 집계 함수는 T 유형 인수 대신 Array(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
-SimpleState
x— 집계 함수의 매개변수입니다.
SimpleAggregateFunction(...) 유형을 갖는 집계 함수의 값입니다.
예시
Query
Response
-State
uniq의 경우 고유값 개수를 계산하기 위한 해시 테이블). 이는 이후 추가 처리에 사용하거나 나중에 집계를 완료할 수 있도록 테이블에 저장할 수 있는 AggregateFunction(...)입니다.
유의하십시오. -MapState는 중간 상태의 데이터 순서가 바뀔 수 있으므로 동일한 데이터에 대해서도 불변하지 않습니다. 하지만 이는 이 데이터의 수집에는 영향을 주지 않습니다.
- AggregatingMergeTree 테이블 엔진.
- finalizeAggregation 함수.
- runningAccumulate 함수.
- -Merge 조합자.
- -MergeState 조합자.
-Merge
-MergeState
-ForEach
[1, 2], [3, 4, 5]and[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).
예시
집계 함수 끝에 -orNull을 추가합니다.
Query
Response
-OrNull은 다른 combinator와 함께 사용할 수도 있습니다. 집계 함수가 빈 입력을 받지 못할 때 유용합니다.
Query
Response
-Resample
start—resampling_key값에 대해 필요한 전체 인터벌의 시작 값입니다.stop—resampling_key값에 대해 필요한 전체 인터벌의 끝 값입니다. 전체 인터벌에는stop값이 포함되지 않습니다([start, stop)).step— 전체 인터벌을 하위 인터벌로 나누는 간격입니다.aggFunction은 각 하위 인터벌에서 독립적으로 실행됩니다.resampling_key— 값에 따라 데이터를 인터벌로 나누는 데 사용하는 컬럼입니다.aggFunction_params—aggFunction의 매개변수입니다.
- 각 하위 인터벌에 대한
aggFunction결과의 배열입니다.
people 테이블을 예로 들어 보겠습니다:
[30,60) 및 [60,75) 인터벌에 속하는 사람들의 이름을 구해 보겠습니다. 나이는 정수로 표현하므로 실제로는 [30, 59] 및 [60,74] 인터벌에 해당하는 나이를 얻게 됩니다.
이름을 배열로 집계하려면 groupArray 집계 함수를 사용합니다. 이 함수는 하나의 인수를 받습니다. 여기서는 name 컬럼입니다. groupArrayResample 함수는 age 컬럼을 사용해 나이별로 이름을 집계합니다. 필요한 인터벌을 정의하려면 30, 75, 30 인수를 groupArrayResample 함수에 전달합니다.
John은 너무 어려서 표본에서 제외됩니다. 다른 사람들은 지정된 연령 구간에 따라 분류됩니다.
이제 지정된 연령 구간별 전체 인원 수와 평균 임금을 계산해 보겠습니다.
-ArgMin
sumArgMin(column, expr), countArgMin(expr), avgArgMin(x, expr) 등입니다.