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

> 집계 함수 문서

# 집계 함수

집계 함수는 데이터베이스 전문가가 기대하는 [일반적인](http://www.sql-tutorial.com/sql-aggregate-functions-sql-tutorial) 방식으로 동작합니다.

ClickHouse는 다음도 지원합니다:

* 컬럼 외에 다른 매개변수도 받는 [매개변수화된 집계 함수](/ko/reference/functions/aggregate-functions/parametric-functions)
* 집계 함수의 동작 방식을 변경하는 [조합자](/ko/reference/functions/aggregate-functions/combinators)

<div id="null-processing">
  ## NULL 처리
</div>

집계 중에는 `NULL` 인수를 모두 건너뜁니다. 집계에 인수가 여러 개 있는 경우, 그중 하나 이상이 `NULL`인 행은 모두 무시됩니다.

이 규칙에는 예외가 있습니다. [`first_value`](/ko/reference/functions/aggregate-functions/first_value), [`last_value`](/ko/reference/functions/aggregate-functions/last_value) 함수와 그 별칭(`any`, `anyLast`)은 수정자 `RESPECT NULLS`가 뒤에 오면 이 규칙의 예외로 처리됩니다. 예를 들어 `FIRST_VALUE(b) RESPECT NULLS`가 있습니다.

**예시:**

다음 테이블을 살펴보겠습니다:

```text theme={null}
┌─x─┬────y─┐
│ 1 │    2 │
│ 2 │ ᴺᵁᴸᴸ │
│ 3 │    2 │
│ 3 │    3 │
│ 3 │ ᴺᵁᴸᴸ │
└───┴──────┘
```

예를 들어 `y` 컬럼의 값 합계를 구해야 한다고 가정해 보겠습니다:

```sql theme={null}
SELECT sum(y) FROM t_null_big
```

```text theme={null}
┌─sum(y)─┐
│      7 │
└────────┘
```

이제 `groupArray` 함수를 사용해 `y` 컬럼으로부터 배열을 만들 수 있습니다:

```sql theme={null}
SELECT groupArray(y) FROM t_null_big
```

```text theme={null}
┌─groupArray(y)─┐
│ [2,2,3]       │
└───────────────┘
```

`groupArray`는 결과 배열에 `NULL`을 포함하지 않습니다.

사용 사례에 맞는 값으로 `NULL`을 바꾸려면 [COALESCE](/ko/reference/functions/regular-functions/functions-for-nulls#coalesce)를 사용할 수 있습니다. 예를 들어 `avg(COALESCE(column, 0))`는 집계 시 컬럼 값을 사용하고, `NULL`인 경우 0을 사용합니다:

```sql theme={null}
SELECT
    avg(y),
    avg(coalesce(y, 0))
FROM t_null_big
```

```text theme={null}
┌─────────────avg(y)─┬─avg(coalesce(y, 0))─┐
│ 2.3333333333333335 │                 1.4 │
└────────────────────┴─────────────────────┘
```

또한 [Tuple](/ko/reference/data-types/tuple)을 사용하면 `NULL`을 스키핑하는 동작을 우회할 수 있습니다. `NULL` 값만 포함하는 `Tuple`은 `NULL`이 아니므로, 집계 함수는 해당 `NULL` 값 때문에 그 행을 스키핑하지 않습니다.

```sql theme={null}
SELECT
    groupArray(y),
    groupArray(tuple(y)).1
FROM t_null_big;

┌─groupArray(y)─┬─tupleElement(groupArray(tuple(y)), 1)─┐
│ [2,2,3]       │ [2,NULL,2,3,NULL]                     │
└───────────────┴───────────────────────────────────────┘
```

컬럼이 집계 함수의 인수로 사용되면 집계가 적용되지 않는다는 점에 유의하십시오. 예를 들어 매개변수가 없는 [`count`](/ko/reference/functions/aggregate-functions/count) (`count()`) 또는 상수 매개변수를 사용하는 (`count(1)`) 경우에는 블록의 모든 행을 계산합니다(`GROUP BY` 컬럼은 인수가 아니므로 그 값과 무관함). 반면 `count(column)`은 column이 `NULL`이 아닌 행의 개수만 반환합니다.

```sql theme={null}
SELECT
    v,
    count(1),
    count(v)
FROM
(
    SELECT if(number < 10, NULL, number % 3) AS v
    FROM numbers(15)
)
GROUP BY v

┌────v─┬─count()─┬─count(v)─┐
│ ᴺᵁᴸᴸ │      10 │        0 │
│    0 │       1 │        1 │
│    1 │       2 │        2 │
│    2 │       2 │        2 │
└──────┴─────────┴──────────┘
```

그리고 다음은 `RESPECT NULLS`를 사용하는 first\_value의 예시로, NULL 입력값도 그대로 존중되어 NULL 여부와 관계없이 처음 읽은 값을 반환하는 것을 확인할 수 있습니다:

```sql theme={null}
SELECT
    col || '_' || ((col + 1) * 5 - 1) AS range,
    first_value(odd_or_null) AS first,
    first_value(odd_or_null) IGNORE NULLS as first_ignore_null,
    first_value(odd_or_null) RESPECT NULLS as first_respect_nulls
FROM
(
    SELECT
        intDiv(number, 5) AS col,
        if(number % 2 == 0, NULL, number) AS odd_or_null
    FROM numbers(15)
)
GROUP BY col
ORDER BY col

┌─range─┬─first─┬─first_ignore_null─┬─first_respect_nulls─┐
│ 0_4   │     1 │                 1 │                ᴺᵁᴸᴸ │
│ 1_9   │     5 │                 5 │                   5 │
│ 2_14  │    11 │                11 │                ᴺᵁᴸᴸ │
└───────┴───────┴───────────────────┴─────────────────────┘
```
