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