카테고리:

집계 함수 (일반) , 윈도우 함수 (일반, 윈도우 프레임)

AVG

NULL이 아닌 레코드의 평균을 반환합니다. 그룹 내의 모든 레코드가 NULL인 경우, 함수가 NULL을 반환합니다.

구문

집계 함수

AVG( [ DISTINCT ] <expr1> )
Copy

윈도우 함수

AVG( [ DISTINCT ] <expr1> ) OVER (
                                 [ PARTITION BY <expr2> ]
                                 [ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
                                 )
Copy

자세한 window_frame 구문은 윈도우 함수 구문 및 사용법 섹션을 참조하십시오.

인자

expr1

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

expr2

분할하는 선택적 식입니다.

expr3

각 파티션 내에서 순서를 지정하는 선택적 식입니다.

사용법 노트

  • VARCHAR 식이 전달되면 이 함수는 암시적으로 입력을 부동 소수점 값으로 캐스팅합니다. 캐스팅을 수행할 수 없으면 오류가 반환됩니다.

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

    • 윈도우 프레임이 필수입니다. 윈도우 프레임이 명시적으로 지정되지 않으면 다음과 같은 암시적 윈도우 프레임이 사용됩니다.

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      구문, 사용법 노트, 예를 포함하여 윈도우 프레임에 대한 자세한 내용은 윈도우 함수 구문 및 사용법 섹션을 참조하십시오.

    • 윈도우 함수에서 DISTINCT 키워드를 사용하는 것은 금지되며 컴파일 시간 오류가 발생합니다.

설정합니다.

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');
Copy

데이터를 표시합니다.

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 |
+---------+----------+------+------+
Copy

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

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

AVGGROUP 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  |
+---------+---------------+---------+
Copy

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

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 |
+---------+-----------------------------------------+
Copy