AVG

AVG

NULL이 아닌 레코드들의 평균을 구하는 집계·윈도우 함수예요. 그룹 안의 모든 레코드가 NULL이면 NULL을 반환해요.

출처: 공식 문서

본문

NULL이 아닌 레코드들의 평균을 반환합니다. 그룹 안의 모든 레코드가 NULL이면 함수는 NULL을 반환합니다.

구문 (Syntax)

집계 함수 (Aggregate function)

AVG( [ DISTINCT ] <expr1> )

윈도우 함수 (Window function)

AVG( [ DISTINCT ] <expr1> ) OVER (
                                 [ PARTITION BY <expr2> ]
                                 [ ORDER BY <expr3> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ <window_frame> ] ]
                                 )

자세한 window_frame 구문은 Window function syntax and usage를 참고하세요.

인자 (Arguments)

숫자 데이터 타입(INTEGER, FLOAT, DECIMAL 등)으로 평가되는 표현식입니다.

파티션을 나눌 선택적 표현식입니다.

각 파티션 안에서 정렬할 선택적 표현식입니다.

사용 참고 사항 (Usage notes)

  • VARCHAR 표현식을 전달하면 이 함수는 입력을 부동 소수점 값으로 암시적으로 형변환합니다. 형변환이 수행될 수 없으면 오류가 반환됩니다.

  • 이 함수가 ORDER BY 절을 포함하는 OVER 절과 함께 윈도우 함수로 호출되면:

윈도우 프레임이 필요합니다. 윈도우 프레임을 명시적으로 지정하지 않으면 다음의 암시적 윈도우 프레임이 사용됩니다:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

윈도우 프레임에 대한 자세한 내용(구문, 사용 참고 사항, 예제 포함)은 Window function syntax and usage를 참고하세요.

DISTINCT 키워드는 사용할 수 없습니다.

예제 (Examples)

설정 (Setup):

CREATE OR REPLACE TABLE avg_example (int_col INT, d DECIMAL(10,5), s1 VARCHAR(10), s2 VARCHAR(10));

INSERT INTO avg_example VALUES
  (1, 1.1, '1.1', 'one'),
  (1, 10, '10', 'ten'),
  (2, 2.4, '2.4', 'two'),
  (2, NULL, NULL, 'NULL'),
  (3, NULL, NULL, 'NULL'),
  (NULL, 9.9, '9.9', 'nine');

데이터 보여주기:

SELECT *
  FROM avg_example
  ORDER BY int_col, d;
+---------+----------+------+------+
| INT_COL |        D | S1   | S2   |
|---------+----------+------+------|
|       1 |  1.10000 | 1.1  | one  |
|       1 | 10.00000 | 10   | ten  |
|       2 |  2.40000 | 2.4  | two  |
|       2 |     NULL | NULL | NULL |
|       3 |     NULL | NULL | NULL |
|    NULL |  9.90000 | 9.9  | nine |
+---------+----------+------+------+

숫자이거나 숫자로 변환할 수 있는 열들의 평균을 계산합니다:

SELECT AVG(int_col), AVG(d)
  FROM avg_example;
+--------------+---------------+
| AVG(INT_COL) |        AVG(D) |
|--------------+---------------|
|     1.800000 | 5.85000000000 |
+--------------+---------------+

AVG를 GROUP BY와 결합해 서로 다른 그룹들의 평균을 계산합니다:

SELECT int_col, AVG(d), AVG(s1)
  FROM avg_example
  GROUP BY int_col
  ORDER BY int_col;
+---------+---------------+---------+
| INT_COL |        AVG(D) | AVG(S1) |
|---------+---------------+---------|
|       1 | 5.55000000000 |    5.55 |
|       2 | 2.40000000000 |    2.4  |
|       3 |          NULL |    NULL |
|    NULL | 9.90000000000 |    9.9  |
+---------+---------------+---------+

간단한 윈도우 함수로 사용합니다:

SELECT
    int_col,
    AVG(int_col) OVER (PARTITION BY int_col)
  FROM avg_example
  ORDER BY int_col;
+---------+-----------------------------------------+
| INT_COL | AVG(INT_COL) OVER(PARTITION BY INT_COL) |
|---------+-----------------------------------------|
|       1 |                                   1.000 |
|       1 |                                   1.000 |
|       2 |                                   2.000 |
|       2 |                                   2.000 |
|       3 |                                   3.000 |
|    NULL |                                    NULL |
+---------+-----------------------------------------+

더 알아보기 (Learn more)