AVG¶
NULL이 아닌 레코드의 평균을 반환합니다. 그룹 내의 모든 레코드가 NULL인 경우, 함수가 NULL을 반환합니다.
구문¶
집계 함수
AVG( [ DISTINCT ] <expr1> )
윈도우 함수
AVG( [ DISTINCT ] <expr1> ) OVER (
[ PARTITION BY <expr2> ]
[ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
)
window_frame
구문에 대한 자세한 내용은 윈도우 프레임 구문과 사용법 을 참조하십시오.
인자¶
expr1
이는 숫자 데이터 타입(INTEGER, FLOAT, DECIMAL 등)으로 평가되는 식입니다.
expr2
분할하는 선택적 식입니다.
expr3
각 파티션 내에서 순서를 지정하는 선택적 식입니다.
사용법 노트¶
VARCHAR 식이 전달되면 이 함수는 암시적으로 입력을 부동 소수점 값으로 캐스팅합니다. 캐스팅을 수행할 수 없으면 오류가 반환됩니다.
이 함수가 윈도우 함수(즉, OVER 절 포함)로 호출될 때:
OVER 절에 ORDER BY 하위 절이 포함된 경우:
윈도우 프레임이 필수입니다. 윈도우 프레임이 명시적으로 지정되지 않은 경우, ORDER BY는 누적 윈도우 프레임을 의미합니다.
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');
데이터를 표시합니다.
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 | +---------+-----------------------------------------+