본문 바로가기

Oracle

Oracle 집계 함수(aggregate functions) 정리 및 실습

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와 결합하면 부서별·직급별 통계도 쉽게 얻을 수 있습니다.