728x90
Oracle SQL에서 AVG 함수는 숫자 칼럼의 평균값을 계산하는 데 사용되는 가장 기본적이면서도 중요한 집계 함수 중 하나입니다. 이 글에서는 AVG()
함수의 기본적인 개념부터 실무 활용 예제, 성능 팁까지 자세히 다룹니다.
1. AVG 함수란?
AVG는 Oracle SQL에서 숫자형 데이터의 평균값을 계산하는 집계 함수(aggregate function)입니다. NULL 값은 계산에서 제외되며, GROUP BY
, PARTITION BY
등과 함께 활용할 수 있어 매우 유용합니다.
📌 기본 문법
SELECT AVG(컬럼명) FROM 테이블명;
2. 간단한 사용 예제
예제 1: 전체 직원의 평균 급여
SELECT AVG(sal) AS avg_salary
FROM emp;
예제 2: 부서별 평균 급여
SELECT deptno, AVG(sal) AS avg_salary
FROM emp
GROUP BY deptno;
deptno | avg_salary |
---|---|
10 | 2916.67 |
20 | 2175.00 |
30 | 1566.67 |
3. NULL 값의 처리
AVG 함수는 NULL 값을 무시합니다. 예를 들어, 급여가 NULL인 직원은 평균 계산에서 제외됩니다.
예제: NULL을 포함한 평균 계산
SELECT AVG(sal) FROM emp WHERE deptno = 40;
→ sal이 NULL인 경우, 결과는 NULL이 아닌 값들의 평균만을 반환합니다.
4. PARTITION BY와의 활용
분석 함수와 결합하여 그룹별 평균을 각 행에 표시할 수 있습니다.
예제: 부서별 평균 급여를 각 행에 표시
SELECT ename, deptno, sal,
AVG(sal) OVER (PARTITION BY deptno) AS dept_avg
FROM emp;
5. AVG와 GROUP BY의 차이점
GROUP BY
는 그룹 단위로 평균을 보여주는 반면, OVER (PARTITION BY)
는 각 행에 해당 그룹의 평균을 표시합니다.
비교 예제
-- GROUP BY 사용
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno;
-- PARTITION BY 사용
SELECT ename, deptno, sal,
AVG(sal) OVER (PARTITION BY deptno) AS avg_by_dept
FROM emp;
6. AVG와 함께 자주 쓰이는 함수
ROUND()
: 평균 결과를 반올림TRUNC()
: 평균 결과의 소수점 절삭CAST()
: 정수 결과로 변환할 때 사용
예제: 소수점 한 자리 반올림
SELECT ROUND(AVG(sal), 1) FROM emp;
7. AVG 함수의 성능 최적화 팁
- 인덱스는 평균 계산에 직접 영향을 주지는 않지만, WHERE 조건에 사용되는 칼럼에는 인덱스를 설정하면 전체 쿼리 성능 향상
- AVG는 집계 함수이므로 가능한 필터링을 먼저 수행한 후 계산하도록 쿼리를 구성
- 서브쿼리나 CTE(Common Table Expression)와 함께 활용하면 복잡한 평균 분석도 가능
8. 실무 활용 예시
💼 예제 1: 최고 평균 급여 부서 찾기
SELECT deptno
FROM (
SELECT deptno, AVG(sal) AS avg_sal
FROM emp
GROUP BY deptno
)
WHERE avg_sal = (SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno);
💼 예제 2: 각 부서의 평균 대비 개인 급여 차이
SELECT ename, deptno, sal,
AVG(sal) OVER (PARTITION BY deptno) AS dept_avg,
sal - AVG(sal) OVER (PARTITION BY deptno) AS diff_from_avg
FROM emp;
9. 주의사항 및 정리
- AVG 함수는 NULL 값을 제외하고 계산
- 집계 함수 vs 분석 함수 구분하여 사용
- 복합 조건이 있는 경우 서브쿼리 또는 WITH 절 활용
💡 TIP: 보고서에 각 부서의 평균 급여를 시각적으로 보여주고 싶을 때
PARTITION BY
는 필수 도구입니다.10. 참고 문헌 및 출처
- Oracle 공식 문서 - docs.oracle.com
- Oracle SQL Tutorial - oracletutorial.com
- Stack Overflow - #oracle-avg
728x90
'ORACLE' 카테고리의 다른 글
[ORACLE] MEDIAN() vs AVG() : 중간 값과 평균 값 차이 이해하기 (0) | 2025.06.01 |
---|---|
[ORACLE] COUNT() vs COUNT(*) 차이점과 성능 비교 (0) | 2025.06.01 |
[ORACLE] SUM() 함수 기본 문법부터 실무 활용 팁까지 (0) | 2025.05.31 |
[ORACLE] ROW_NUMBER() 함수 완벽 가이드 : 순위 매기기 실전 예제로 배우기 (0) | 2025.05.31 |
[ORACLE] DENSE_RANK() 함수 완전 정복 : 순위 함수 실전 예제로 배우기 (0) | 2025.05.31 |