SQL의 고급 그룹함수 완벽 정리: ROLLUP, CUBE, GROUPING SETS, GROUPING, CASE문 📊
안녕하세요, 이번 글에서는 SQL의 강력한 분석 기능을 제공하는 고오오급 그룹함수인 ROLLUP, CUBE, GROUPING SETS, GROUPING, 그리고 CASE문과의 활용법에 대해 상세히 알아보겠습니다.
📌 1. ROLLUP
ROLLUP은 지정한 그룹 컬럼들로 단계적인 합계를 계산하여 제공하는 함수입니다. 가장 작은 그룹부터 전체 합계까지 차례로 계산됩니다.
사용법
SELECT dept, job, SUM(salary)
FROM employee
GROUP BY ROLLUP(dept, job);
- 의미: 부서(dept)와 직무(job)별로 합계를 계산하고, 부서별 합계와 전체 합계를 추가로 계산합니다.
- 부서와 직무별 합계 > 부서별 합계 > 전체합계
📌 2. CUBE
CUBE는 지정된 그룹 컬럼들로 가능한 모든 조합의 합계를 제공합니다.
사용법
SELECT dept, job, SUM(salary)
FROM employee
GROUP BY CUBE(dept, job);
- 의미: 부서(dept)별, 직무(job)별, 부서와 직무 조합, 전체 합계를 모두 제공합니다.
- 부서별 > 직무별 > 부서 + 직무 > 전체
📌 3. GROUPING SETS
GROUPING SETS는 사용자가 원하는 특정 그룹의 조합만 선택적으로 지정하여 합계를 계산할 수 있습니다.
사용법
SELECT dept, job, SUM(salary)
FROM employee
GROUP BY GROUPING SETS ((dept, job), (dept), ());
- 의미: 부서와 직무 조합, 부서별 합계, 전체 합계만 제공됩니다.
📌 4. GROUPING 함수
GROUPING 함수는 특정 컬럼이 집계된 결과인지 아닌지를 판별해줍니다. ROLLUP, CUBE와 자주 함께 사용됩니다.
사용법
SELECT dept, job, SUM(salary),
GROUPING(dept) AS dept_group,
GROUPING(job) AS job_group
FROM employee
GROUP BY ROLLUP(dept, job);
- 의미: dept 또는 job이 집계된 합계 행이면 1을, 그렇지 않으면 0을 반환합니다.
📌 5. 그룹함수와 CASE문 활용
그룹함수와 CASE문을 함께 사용하면 집계 결과를 더욱 명확하게 표현할 수 있습니다.
사용법
SELECT dept,
CASE GROUPING(job)
WHEN 1 THEN '직무 전체 합계'
ELSE job
END AS job,
SUM(salary)
FROM employee
GROUP BY ROLLUP(dept, job);
- 의미: 직무별 합계가 아닌 전체 합계 행은 '직무 전체 합계'라는 표현으로 명확하게 표시합니다.
📌 예시 결과 분석
DEPT | JOB | SUM(SALARY) |
IT | Engineer | 5000 |
IT | Developer | 4500 |
IT | 직무 전체 합계 | 9500 |
HR | Recruiter | 4000 |
HR | 직무 전체 합계 | 4000 |
NULL | 직무 전체 합계 | 13500 |
- 부서별, 직무별, 전체 합계가 명확히 표현되었습니다.
🔑 핵심 정리 요약
함수명 | 역할 | 사용처 |
ROLLUP | 그룹별 단계적 합계 | 부서→직무→전체 |
CUBE | 가능한 모든 그룹 조합 합계 | 다양한 다차원 분석 |
GROUPING SETS | 특정 조합만 선택적으로 합계 | 맞춤형 분석 |
GROUPING | 그룹핑 여부를 판단(집계된 값인지) | ROLLUP, CUBE와 함께 사용 |
CASE문과 그룹함수 | 집계 결과를 명확한 표현으로 변경 | 결과 가독성 향상 |
🎯 시험을 위한 외우기 쉬운 꿀팁!
- ROLLUP: "굴려서(ROLL) 단계적으로 UP한다!"
- CUBE: "모든 면을 가진 주사위(CUBE)처럼 모든 조합을 보여준다!"
- GROUPING SETS: "내가 원하는 세트만 고른다!"
- GROUPING: "집계되었나 안되었나? 체크하는 함수!"
- CASE문과 그룹함수: "CASE는 표현을 명확하게 바꿔주는 친절한 안내자!"