728x90

Oracle SQL에서 VARIANCE() 함수는 데이터 집합의 분산(Variance)을 계산하는 통계 함수입니다. 분산은 데이터가 평균값을 기준으로 얼마나 흩어져 있는지를 수치로 나타내며, STDDEV() 함수의 제곱 값이기도 합니다. 본 가이드는 Oracle에서 VARIANCE() 함수를 활용하는 다양한 방법을 실무 중심 예제와 함께 설명합니다.
1. VARIANCE() 함수란?
VARIANCE() 함수는 수치형 칼럼의 데이터에 대해 표본 분산을 계산합니다. Oracle은 VARIANCE() 외에도 VAR_POP() 함수를 제공하며, 이 둘은 계산 방식에서 차이가 있습니다.
SELECT VARIANCE(salary) AS salary_variance
FROM employees;
2. 분산(Variance)의 개념
- 분산은 각 값에서 평균을 뺀 값의 제곱 평균
- 공식: ∑(x - 평균)^2 / (n - 1)
- 단위가 원래 값의 제곱이므로 해석 시 주의 필요
- 표준편차(
STDDEV())는 분산의 제곱근
3. VARIANCE() 기본 사용법
직원 급여의 분산을 계산하는 기본 쿼리:
SELECT VARIANCE(salary) AS salary_variance
FROM employees;
4. VARIANCE() + GROUP BY
부서별 급여 분산을 확인:
SELECT department_id, VARIANCE(salary) AS dept_variance
FROM employees
GROUP BY department_id;
5. 조건에 따른 분산 분석
특정 부서나 직무 조건을 지정하여 분산 계산:
SELECT VARIANCE(salary) AS variance_sales
FROM employees
WHERE department_id = 80;
6. 분석 함수로 활용하기 (Analytic Function)
Oracle에서는 VARIANCE() 함수도 분석 함수 형태로 사용할 수 있습니다.
SELECT employee_id, department_id, salary,
VARIANCE(salary) OVER (PARTITION BY department_id) AS dept_variance
FROM employees;
7. 실무 활용 예제
7.1 직무별 급여 분산 비교
SELECT job_id, VARIANCE(salary) AS variance_salary
FROM employees
GROUP BY job_id;
7.2 월별 매출의 분산
SELECT TO_CHAR(sales_date, 'YYYY-MM') AS sales_month,
VARIANCE(amount) AS monthly_variance
FROM sales
GROUP BY TO_CHAR(sales_date, 'YYYY-MM');
7.3 부서별 급여 분산이 전체보다 큰 부서
SELECT department_id
FROM employees
GROUP BY department_id
HAVING VARIANCE(salary) > (SELECT VARIANCE(salary) FROM employees);
8. VARIANCE()와 VAR_POP()의 차이
| 함수 | 설명 | 용도 |
|---|---|---|
| VARIANCE() | 표본 기반 분산 (n-1) | 일반적인 통계 분석용 |
| VAR_POP() | 모집단 기반 분산 (n) | 전체 데이터 집합 분석용 |
9. 성능 주의사항
- GROUP BY나 분석 함수 사용 시 정렬 비용 발생 가능
- NULL은 자동으로 무시되며, NULL 비율이 높으면 왜곡 가능성 있음
- 대용량 데이터 처리 시 인덱스와 병렬처리 옵션 고려
10. 자주 묻는 질문 (FAQ)
Q1. VARIANCE()는 NULL을 포함하나요?
A. 포함하지 않습니다. NULL은 자동으로 제외됩니다.
Q2. VARIANCE()는 어떤 데이터 타입에 사용할 수 있나요?
A. 숫자형(Numeric) 칼럼에만 적용됩니다.
Q3. VARIANCE()는 AVG()와 함께 사용 가능한가요?
A. 가능합니다. 평균과 분산을 함께 계산하여 데이터를 다면적으로 분석할 수 있습니다.
11. 요약
Oracle의 VARIANCE() 함수는 데이터 분산도를 계산하여 값들의 퍼짐 정도를 분석할 수 있는 강력한 통계 함수입니다. 평균이나 최댓값/최솟값만으로 파악하기 어려운 데이터를 보다 정밀하게 해석하는 데 유용하며, GROUP BY, OVER(), HAVING과 같은 SQL 구문과 결합해 다양한 실무 분석에 적용할 수 있습니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle Live SQL 예제: https://livesql.oracle.com
- Stack Overflow 통계 함수 관련 질의응답
- Oracle SQL Developer 공식 블로그
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] LEAD() 함수와 LAG() 함수 비교 분석 (0) | 2025.06.01 |
|---|---|
| [ORACLE] LAG() 함수 : PARTITION BY와 함께 쓰는 고급 예제 (0) | 2025.06.01 |
| [ORACLE] STDDEV() 함수로 표준편차 계산하는 방법 (0) | 2025.06.01 |
| [ORACLE] MAX() 함수로 그룹 별 최대 값 구하는 법 (0) | 2025.06.01 |
| [ORACLE] MIN() 함수 사용법과 GROUP BY 절 실전 적용 (0) | 2025.06.01 |