> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-3a82795f.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 집계 함수의 중간 상태를 저장하는 ClickHouse의 AggregateFunction 데이터 타입에 대한 문서입니다

# AggregateFunction 유형

<div id="description">
  ## 설명
</div>

ClickHouse의 모든 [집계 함수](/ko/reference/functions/aggregate-functions)에는
직렬화하여 `AggregateFunction` 데이터 타입으로 저장하고
테이블에 보관할 수 있는 구현별 중간 상태가 있습니다. 이는 일반적으로
[materialized view](/ko/reference/statements/create/view)를 통해 수행됩니다.

`AggregateFunction` 타입과 함께 일반적으로 사용되는 집계 함수 [조합자](/ko/reference/functions/aggregate-functions/combinators)는
두 가지입니다:

* [`-State`](/ko/reference/functions/aggregate-functions/combinators#-state) 집계 함수 조합자는 집계
  함수 이름 뒤에 붙이면 `AggregateFunction` 중간 상태를 생성합니다.
* [`-Merge`](/ko/reference/functions/aggregate-functions/combinators#-merge) 집계
  함수 조합자는 중간 상태에서 집계의 최종 결과를 얻는 데
  사용됩니다.

<div id="syntax">
  ## 구문
</div>

```sql theme={null}
AggregateFunction(aggregate_function_name, types_of_arguments...)
```

**매개변수**

* `aggregate_function_name` - 집계 함수의 이름입니다. 함수가
  매개변수형인 경우 해당 매개변수도 함께 지정해야 합니다.
* `types_of_arguments` - 집계 함수 인수의 타입입니다.

예시:

```sql theme={null}
CREATE TABLE t
(
    column1 AggregateFunction(uniq, UInt64),
    column2 AggregateFunction(anyIf, String, UInt8),
    column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...
```

<div id="usage">
  ## 사용 방법
</div>

<div id="data-insertion">
  ### 데이터 삽입
</div>

`AggregateFunction` 유형의 컬럼이 있는 테이블에 데이터를 삽입하려면,
집계 함수와
[`-State`](/ko/reference/functions/aggregate-functions/combinators#-state) 집계
함수 조합자를 사용해 `INSERT SELECT`를 실행할 수 있습니다.

예를 들어, `AggregateFunction(uniq, UInt64)` 및
`AggregateFunction(quantiles(0.5, 0.9), UInt64)` 유형의 컬럼에 삽입하려면 다음과 같은
조합자가 적용된 집계 함수를 사용합니다.

```sql theme={null}
uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)
```

함수 `uniq` 및 `quantiles`와 달리 `uniqState`와 `quantilesState`는
(`-State` 조합자가 추가된 형태) 최종 값이 아니라 상태를 반환합니다.
즉, `AggregateFunction` 유형의 값을 반환합니다.

`SELECT` 쿼리 결과에서 `AggregateFunction` 유형의 값은
ClickHouse의 모든 출력 포맷에서 구현별 이진 표현을 가집니다.

입력 값으로부터 상태를 구성할 수 있도록 하는 특별한 세션 수준 설정 `aggregate_function_input_format`이 있습니다.
이 설정은 다음 포맷을 지원합니다:

* `state` - 직렬화된 상태를 담은 바이너리 문자열(기본값)입니다.
  예를 들어 `SELECT` 쿼리로 데이터를 `TabSeparated` 포맷으로 덤프한 경우,
  이 덤프는 `INSERT` 쿼리를 사용해 다시 로드할 수 있습니다.
* `value` - 이 포맷은 집계 함수 인수의 단일 값 또는 인수가 여러 개인 경우 해당 값들의 튜플을 기대하며, 이를 역직렬화해 해당 상태를 구성합니다
* `array` - 이 포맷은 위의 `value` 옵션에 설명된 것처럼 값의 배열을 기대하며, 배열의 모든 요소를 집계해 상태를 구성합니다

<div id="data-selection">
  ### 데이터 선택
</div>

`AggregatingMergeTree` 테이블에서 데이터를 선택할 때는 `GROUP BY` 절과
데이터를 삽입할 때 사용한 것과 동일한 집계 함수를 사용하되,
[`-Merge`](/ko/reference/functions/aggregate-functions/combinators#-merge) 조합자를 사용합니다.

집계 함수에 `-Merge` 조합자를 추가하면 상태 집합을 받아
이를 결합한 뒤 전체 데이터 집계 결과를 반환합니다.

예를 들어, 다음 두 쿼리는 동일한 결과를 반환합니다:

```sql theme={null}
SELECT uniq(UserID) FROM table

SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)
```

<div id="usage-example">
  ## 사용 예시
</div>

[AggregatingMergeTree](/ko/reference/engines/table-engines/mergetree-family/aggregatingmergetree) 엔진 설명을 참고하십시오.

<div id="related-content">
  ## 관련 콘텐츠
</div>

* 블로그: [ClickHouse에서 배열, 맵, 상태에 집계 조합자 적용하기](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states)
* [MergeState](/ko/reference/functions/aggregate-functions/combinators#-mergestate)
  조합자.
* [State](/ko/reference/functions/aggregate-functions/combinators#-state) 조합자.
