본문으로 건너뛰기
SQLD 준비실
이론 전체 목차 열기 15 / 32

SQL 기본 및 활용 · 고급 집계 15 / 32

그룹 함수와 윈도우 함수

ROLLUP, CUBE, GROUPING SETS와 RANK, DENSE_RANK, ROW_NUMBER 같은 윈도우 함수를 결과 모양 중심으로 익힙니다.

출제 빈도 ★★★★ 관련 문제 7개 | ROLLUPCUBERANKOVER

GROUP BY 다음 단계

일반 GROUP BY는 지정한 컬럼 조합별로 한 번만 집계합니다.

SELECT deptno, job, SUM(sal) AS sal_sum
FROM emp
GROUP BY deptno, job;

그룹 함수는 여기서 더 나아가 소계와 총계를 함께 만듭니다. 시험에서는 ROLLUP, CUBE, GROUPING SETS가 각각 어떤 집계 행을 추가하는지 묻습니다.

ROLLUP

ROLLUP(a, b)(a, b) 상세 집계, a 기준 소계, 전체 총계를 만듭니다.

SELECT deptno, job, SUM(sal) AS sal_sum
FROM emp
GROUP BY ROLLUP(deptno, job);

순서가 중요합니다. ROLLUP(deptno, job)은 부서별 직무 합계와 부서 소계를 만들지만, 직무별 소계만 따로 만들지는 않습니다.

CUBE

CUBE(a, b)는 가능한 모든 조합의 집계를 만듭니다.

SELECT deptno, job, SUM(sal) AS sal_sum
FROM emp
GROUP BY CUBE(deptno, job);

CUBE(deptno, job)(deptno, job), deptno, job, 전체 총계를 모두 만듭니다. 결과가 풍부한 대신 집계해야 할 조합이 많아집니다.

GROUPING SETS

GROUPING SETS는 필요한 집계 조합만 직접 고릅니다.

SELECT deptno, job, SUM(sal) AS sal_sum
FROM emp
GROUP BY GROUPING SETS ((deptno), (job));

위 쿼리는 부서별 합계와 직무별 합계만 만듭니다. (deptno, job) 상세 집계와 전체 총계는 만들지 않습니다.

세 그룹 함수 비교

함수결과 성격기억법
ROLLUP계층형 소계위에서 아래로 말아 올립니다
CUBE모든 조합 집계가능한 면을 전부 봅니다
GROUPING SETS지정한 조합만 집계필요한 세트만 고릅니다

윈도우 함수란

윈도우 함수는 행을 없애지 않고, 각 행 옆에 순위나 누적값 같은 분석 결과를 붙입니다.

SELECT ename,
       deptno,
       sal,
       RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS dept_rank
FROM emp;

GROUP BY는 여러 행을 한 행으로 줄이지만, 윈도우 함수는 원래 행을 유지합니다. 이 차이가 가장 중요합니다.

GROUP BY 집계

  • 행 수가 줄어듭니다 (부서별 1행).
  • 개별 사원 정보는 사라집니다.
  • 결과: deptno, SUM(sal)

윈도우 함수

  • 행 수가 유지됩니다 (사원 14행 그대로).
  • 각 행 옆에 집계·순위가 붙습니다.
  • 결과: ename, sal, RANK() OVER (...)

OVER 절 읽기

윈도우함수() OVER (
  PARTITION BY 그룹기준
  ORDER BY 정렬기준
)
  • PARTITION BY는 계산을 나눌 그룹입니다.
  • ORDER BY는 그룹 안에서 순서를 정합니다.
  • 둘 다 생략할 수도 있지만, 순위 함수는 보통 정렬 기준이 필요합니다.

순위 함수 3개

함수동점 처리결과 예
RANK동점 후 다음 순위를 건너뜀1, 2, 2, 4
DENSE_RANK동점 후 다음 순위를 붙여 씀1, 2, 2, 3
ROW_NUMBER동점이어도 고유 번호 부여1, 2, 3, 4

동점이 있는 문제에서 RANKDENSE_RANK를 구분하는 문제가 자주 나옵니다. “빈 순위가 생기면 RANK, 빈 순위가 없으면 DENSE_RANK”로 기억해 두시면 도움이 됩니다.

순서·비율 함수

함수용도
LAG이전 행 값 확인
LEAD다음 행 값 확인
FIRST_VALUE파티션 첫 값 확인
LAST_VALUE파티션 마지막 값 확인
NTILE(n)전체를 n개 구간으로 나눔
RATIO_TO_REPORT전체 합계 대비 비율 계산

시험장에서 구분하는 법

  • 행 수가 줄어들면 GROUP BY 집계 문제입니다.
  • 행 수가 유지되고 순위·누적·이전값이 붙으면 윈도우 함수 문제입니다.
  • 소계와 총계가 함께 나오면 ROLLUP, CUBE, GROUPING SETS를 의심합니다.
  • 동점 순위의 빈 번호 여부로 RANKDENSE_RANK를 구분합니다.

한 문장 요약

그룹 함수는 집계 행을 만들고, 윈도우 함수는 원래 행 옆에 분석 값을 붙입니다.