Oracle에서 집계 함수는 다수의 행(row)을 하나의 값으로 요약할 때 사용합니다. 실제 업무에서는 매출 합계, 평균 급여, 최대·최소값 조회 등 다양한 통계 처리에 필수적입니다.
주요 집계 함수
- COUNT(*)
전체 행(row)의 개수를 반환합니다.
- COUNT(컬럼)
지정한 컬럼이 NULL이 아닌 행의 개수를 셉니다.
- MAX(컬럼)
컬럼 내에서 가장 큰(최댓값) 값을 반환합니다.
- MIN(컬럼)
컬럼 내에서 가장 작은(최소값) 값을 반환합니다.
- SUM(컬럼)
컬럼 값의 합계를 계산합니다.
- AVG(컬럼)
컬럼 값의 평균을 계산합니다.
실습 테이블: SAWON
컬럼명 |
설명 |
예시 |
sabun |
사원번호 |
1, 2, 3… |
saname |
사원이름 |
‘장동건’, ‘안재욱’ |
sagender |
성별 |
‘남자’, ‘여자’ |
deptno |
소속 부서 번호 |
10, 20, 30… |
sajob |
직급 |
‘부장’, ‘과장’, ‘사원’ |
sahire |
입사일 |
1984-07-25 |
samgr |
상사 사원번호 |
NULL, 1, 2… |
sapay |
급여 |
2000, 4000 |
1. 전체 데이터 집계 예제
SELECT
COUNT(*) AS 전체_레코드_수,
COUNT(samgr) AS 부서장이_아닌_사원_수,
MAX(sapay) AS 최고_급여액,
MIN(sapay) AS 최저_급여액,
SUM(sapay) AS 급여_총합,
AVG(sapay) AS 급여_평균,
MAX(sahire) AS 최근_입사일,
MIN(sahire) AS 최장근속_입사일
FROM sawon;
전체_레코드_수 |
부서장이_아닌_사원_수 |
최고_급여액 |
최저_급여액 |
급여_총합 |
급여_평균 |
최근_입사일 |
최장근속_입사일 |
20 |
15 |
4500 |
500 |
61,700 |
3,085 |
2005-05-25 |
1984-07-25 |
- COUNT(*)는 모든 행을 집계하여 20건을 반환합니다.
- COUNT(samgr)는 samgr가 NULL이 아닌 15건만 셉니다.
- MAX/MIN(급여)로 최고·최저 급여를, SUM/AVG(급여)로 급여 총합과 평균을 계산합니다.
- MAX/MIN(입사일)로 가장 최근·오래된 입사일을 조회할 수 있습니다.
2. 부서장 여부로 데이터 조회
2.1. 부서장 조회 (samgr IS NULL)
SELECT *
FROM sawon
WHERE samgr IS NULL;
사원번호 |
이름 |
성별 |
부서번호 |
직급 |
입사일 |
상사번호 |
급여 |
1 |
장동건 |
남자 |
40 |
부장 |
1993-07-25 |
NULL |
4000 |
2 |
안재욱 |
남자 |
20 |
부장 |
1988-02-25 |
NULL |
4000 |
7 |
최불암 |
남자 |
10 |
부장 |
1984-07-25 |
NULL |
4000 |
12 |
안성기 |
남자 |
20 |
부장 |
1994-05-25 |
NULL |
4000 |
19 |
최명길 |
여자 |
30 |
부장 |
1988-08-25 |
NULL |
4500 |
2.2. 일반 사원 조회 (samgr IS NOT NULL)
SELECT *
FROM sawon
WHERE samgr IS NOT NULL;
사원번호 |
이름 |
성별 |
부서번호 |
직급 |
입사일 |
상사번호 |
급여 |
3 |
이미자 |
여자 |
20 |
대리 |
1998-03-25 |
2 |
3500 |
4 |
최진실 |
여자 |
10 |
과장 |
1993-05-25 |
7 |
3800 |
5 |
영턱스 |
남자 |
10 |
사원 |
2000-07-11 |
14 |
2200 |
6 |
김민종 |
남자 |
20 |
사원 |
2002-03-15 |
3 |
2400 |
8 |
맥라이언 |
여자 |
30 |
과장 |
2004-05-25 |
19 |
3900 |
9 |
최민수 |
남자 |
10 |
사원 |
2005-04-25 |
4 |
2000 |
10 |
배용준 |
남자 |
30 |
알바 |
2005-05-25 |
17 |
500 |
11 |
김용만 |
남자 |
40 |
과장 |
1993-08-25 |
1 |
3000 |
13 |
배슬기 |
여자 |
20 |
대리 |
1997-11-25 |
12 |
3200 |
14 |
전도현 |
여자 |
10 |
과장 |
1997-05-25 |
7 |
3800 |
15 |
데미무어 |
여자 |
30 |
대리 |
2000-12-25 |
8 |
3000 |
16 |
감우성 |
남자 |
10 |
대리 |
1998-05-25 |
4 |
3300 |
17 |
이미연 |
여자 |
30 |
사원 |
2003-06-25 |
15 |
2000 |
18 |
이소라 |
여자 |
20 |
사원 |
2003-12-31 |
13 |
2400 |
20 |
차범근 |
남자 |
20 |
사원 |
2005-01-25 |
13 |
2200 |
활용 팁 및 주의사항
- COUNT(col)은 NULL을 제외하므로, 결측치(null) 개수를 파악하려면 COUNT(*) - COUNT(col)을 사용하세요.
- AVG 결과가 소수점까지 필요하면 ROUND(AVG(col), 2)처럼 반올림 함수를 함께 쓰면 깔끔합니다.
- 여러 집계 함수를 GROUP BY와 결합하면 부서별·직급별 통계도 쉽게 얻을 수 있습니다.