728x90

1. SUM 함수란?
SUM() 함수는 숫자형 칼럼의 총합을 계산하는 Oracle SQL의 대표적인 집계 함수입니다. GROUP BY, PARTITION BY 절과 함께 쓰이면 더욱 강력한 통계 분석 도구로 변모합니다.
📌 기본 문법
SELECT SUM(컬럼명) FROM 테이블명;
2. SUM 함수의 기본 예제
예제: 전체 직원의 급여 총합
SELECT SUM(sal) AS total_salary
FROM emp;
결과 예시:
| total_salary |
|---|
| 29025 |
3. GROUP BY와 함께 사용하기
GROUP BY는 특정 칼럼을 기준으로 데이터를 묶은 후, 각 그룹별로 합계를 구할 수 있게 해 줍니다.
예제: 부서별 급여 총합
SELECT deptno, SUM(sal) AS dept_total_salary
FROM emp
GROUP BY deptno;
4. PARTITION BY와 함께 분석 함수로 활용
SUM() 함수는 분석 함수와 함께 OVER() 절을 사용하여 행 단위 결과 + 누적 합계 계산이 가능합니다.
예제: 부서별 누적 급여 합계
SELECT deptno, ename, sal,
SUM(sal) OVER (PARTITION BY deptno ORDER BY sal DESC) AS running_total
FROM emp;
5. 조건부 SUM (CASE WHEN)
CASE WHEN과 함께 사용하면 특정 조건을 만족하는 행만 대상으로 합계를 구할 수 있습니다.
예제: 2000 이상 급여자의 합계
SELECT SUM(CASE WHEN sal >= 2000 THEN sal ELSE 0 END) AS high_salary_sum
FROM emp;
6. 실무 활용 예제
💼 예제 1: 고객별 월별 주문 합계
SELECT customer_id, TO_CHAR(order_date, 'YYYY-MM') AS order_month,
SUM(order_amount) AS monthly_total
FROM orders
GROUP BY customer_id, TO_CHAR(order_date, 'YYYY-MM');
💼 예제 2: 지역별 누적 매출 계산
SELECT region, order_date, sales_amount,
SUM(sales_amount) OVER (PARTITION BY region ORDER BY order_date) AS regional_running_total
FROM sales;
7. 성능 팁 및 최적화
- 인덱스 활용: GROUP BY, WHERE 절에 사용되는 칼럼은 인덱스 설정 권장
- ROLLUP, CUBE: 다차원 합계를 구할 때 유용
- NULL 값: SUM은 NULL을 무시하고 계산함
8. SUM 함수 오류 및 주의사항
ORA-00937: 단일 그룹 함수가 아닌 SELECT 문에서 GROUP BY 누락 시 발생NULL: NULL 값은 합계에서 제외되므로 데이터 정제 필요데이터 타입: SUM 함수는 숫자형 칼럼에서만 동작
💡 TIP: SUM 함수는 단순한 합계 계산을 넘어서, 누적 분석, 조건부 집계, 실시간 분석에도 매우 유용합니다.
9. 요약정리
| 항목 | 내용 |
|---|---|
| 기본 용도 | 숫자 컬럼의 총합 계산 |
| 결합 문법 | GROUP BY, OVER(PARTITION BY), CASE WHEN |
| 실무 활용 | 매출 집계, 성과 분석, 보고서 출력 |
| 주의사항 | NULL 제외, GROUP BY 생략 오류 |
10. 참고 문헌 및 출처
- Oracle 공식 문서 - docs.oracle.com
- Oracle SQL Tutorial - oracletutorial.com
- Stack Overflow - #oracle-sum
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] COUNT() vs COUNT(*) 차이점과 성능 비교 (0) | 2025.06.01 |
|---|---|
| [ORACLE] AVG() 함수 완벽 정리 : 평균 계산의 모든 것 (0) | 2025.05.31 |
| [ORACLE] ROW_NUMBER() 함수 완벽 가이드 : 순위 매기기 실전 예제로 배우기 (0) | 2025.05.31 |
| [ORACLE] DENSE_RANK() 함수 완전 정복 : 순위 함수 실전 예제로 배우기 (0) | 2025.05.31 |
| [ORACLE] PARTITION BY() 함수 설명과 실무 SQL 예제 모음 (0) | 2025.05.31 |