집계 함수

집계 함수는 행 전체의 값에 대한 연산을 통해 합계, 평균, 계산, 최소값/최대값, 표준 편차, 추정과 같은 수학적 계산은 물론이고, 몇 가지 비수학적 연산도 수행합니다.

집계 함수는 여러 행(실제로는 0개, 1개 또는 그 이상의 행)을 입력값으로 받아 단일 출력값을 생성합니다. 반대로, 스칼라 함수는 하나의 행을 입력값으로 받아 하나의 행(하나의 값)을 출력값으로 생성합니다.

집계 함수는 입력값에 0개의 행이 포함되어 있을 때도 항상 정확히 하나의 행을 반환합니다. 일반적으로, 입력값에 0개의 행이 포함된 경우 출력값은 NULL입니다. 하지만 집계 함수는 0개의 행을 전달할 때 0, 빈 문자열 또는 기타 값을 반환할 수 있습니다.

이 항목의 내용:

함수의 목록(하위 카테고리별)

함수 이름

참고

일반 집계

다른 집계 함수와 다른 구문을 사용합니다.

다른 집계 함수와 다른 구문을 사용합니다.

STDDEV_SAMP 의 별칭입니다.

VAR_POP 의 별칭입니다.

VAR_SAMP 의 별칭입니다.

비트 집계

부울 집계

해시

반정형 데이터 집계

선형 회귀

통계 및 확률

고유 값 계산

카디널리티 추정 . (HyperLogLog 사용)

HLL 의 별칭입니다.

집계 함수가 아니며, HLL_ACCUMULATE 또는 HLL_COMBINE 의 스칼라 입력값을 사용합니다.

유사성 추정 . (MinHash 사용)

APPROXIMATE_SIMILARITY 의 별칭입니다.

빈도 추정 . (공간 절약 사용)

집계 함수가 아니며, APPROX_TOP_K_ACCUMULATE 또는 APPROX_TOP_K_COMBINE 의 스칼라 입력값을 사용합니다.

백분위수 추정 . (t-Digest 사용)

집계 함수가 아니며, APPROX_PERCENTILE_ACCUMULATE 또는 APPROX_PERCENTILE_COMBINE 의 스칼라 입력값을 사용합니다.

집계 유틸리티

집계 함수는 아니지만, GROUP BY 쿼리로 생성된 행의 집계 수준을 결정하기 위해 집계 함수와 함께 사용할 수 있습니다.

GROUPING 의 별칭입니다.

소개 예

다음 예에서는 집계 함수(AVG)와 스칼라 함수(COS)의 차이점을 보여줍니다. 스칼라 함수는 각 입력 행에 대해 하나의 출력 행을 반환하는 반면, 집계 함수는 여러 입력 행에 대해 하나의 출력 행을 반환합니다.

테이블에는 다음 데이터가 있습니다.

SELECT x, y 
    FROM simple
    ORDER BY x,y;
+----+----+
|  X |  Y |
|----+----|
| 10 | 20 |
| 20 | 44 |
| 30 | 70 |
+----+----+
Copy

스칼라 함수는 각 입력 행에 대해 하나의 출력 행을 반환합니다.

SELECT COS(x)
    FROM simple
    ORDER BY x;
+---------------+
|        COS(X) |
|---------------|
| -0.8390715291 |
|  0.4080820618 |
|  0.1542514499 |
+---------------+
Copy

집계 함수는 여러 입력 행에 대해 하나의 출력 행을 반환합니다.

SELECT SUM(x)
    FROM simple;
+--------+
| SUM(X) |
|--------|
|     60 |
+--------+
Copy

집계 함수 및 NULL 값

일부 집계 함수는 NULL 값을 무시합니다. 예를 들어, AVG 는 다음 수식을 기반으로 값 1, 5, NULL 의 평균이 3 인 것으로 계산합니다.

(1 + 5) / 2 = 3

분자와 분모에서 모두 NULL이 아닌 값 두 개만 사용합니다.

집계 함수에 전달된 모든 값이 NULL인 경우 집계 함수는 NULL을 반환합니다.

일부 집계 함수에는 둘 이상의 열이 전달될 수 있습니다. 예:

SELECT COUNT(col1, col2) FROM table1;
Copy

이런 경우에는 개별 열이 NULL이면 집계 함수가 행을 무시합니다.

예를 들어, 다음 쿼리에서는 선택한 열에서 네 행 중 세 행에 하나 이상의 NULL 값이 있으므로 COUNT4 가 아니라 1 을 반환합니다.

다음과 같이 테이블을 만들고 값으로 채웁니다.

CREATE TABLE t (x INT, y INT);
INSERT INTO t (x, y) VALUES
  (1, 2),         -- No NULLs.
  (3, NULL),      -- One but not all columns are NULL.
  (NULL, 6),      -- One but not all columns are NULL.
  (NULL, NULL);   -- All columns are NULL.
Copy

테이블을 쿼리합니다.

SELECT COUNT(x, y) FROM t;
+-------------+
| COUNT(X, Y) |
|-------------|
|           1 |
+-------------+
Copy

마찬가지로, 두 개 이상의 열을 참조하는 식으로 SUM 을 호출하고 해당 열 중 하나 이상이 NULL인 경우 이 식은 NULL로 계산되고 행은 무시됩니다.

SELECT SUM(x + y) FROM t;
+------------+
| SUM(X + Y) |
|------------|
|          3 |
+------------+
Copy

다음과 같이 이 동작은 일부 열이 NULL일 때 행을 삭제하지 않는 GROUP BY 의 동작과 다릅니다.

SELECT x AS X_COL, y AS Y_COL FROM t GROUP BY x, y;
+-------+-------+
| X_COL | Y_COL |
|-------+-------|
|     1 |     2 |
|     3 |  NULL |
|  NULL |     6 |
|  NULL |  NULL |
+-------+-------+
Copy