sqld

PIVOT에 대해 알아보자

자격증원톱 2026. 2. 25. 14:00
반응형

PIVOT에 대해 알아보자

반응형

 

1) PIVOT 절 요약: “행 데이터를 열로 돌려 세운다”

개념

  • 세로로 늘어진 값(행)을 특정 컬럼의 값 기준으로 **가로 열(컬럼)**로 펼칩니다.
  • 보통 “집계(합계/개수)”가 같이 들어갑니다.
    → 그래서 피벗은 “요약 보고서 표” 만들 때 많이 씁니다.

기본 형태(이미지 내용)

SELECT ...
FROM (원본 SELECT)
PIVOT (
집계함수(집계대상컬럼)
FOR 피벗기준컬럼 IN (열로 만들 값들...)
);
  • FOR : “어떤 컬럼을 열로 펼칠 거냐?”
  • IN : “열로 만들 값 목록(직접 적어줘야 함)”
    예: JOB이 CLERK, SALESMAN… 이 값들이 열 이름이 됨

예시 1) “부서(DEPTNO)별 직무(JOB) 인원수”

원본 데이터는 보통 이런 형태죠(세로):

  • (DEPTNO=10, JOB=CLERK, EMPNO=…)
  • (DEPTNO=10, JOB=MANAGER, EMPNO=…)

이걸 피벗하면 “부서가 행, 직무가 열”이 됩니다.

SELECT *
FROM (
SELECT deptno, job, empno
FROM emp
)
PIVOT (
COUNT(empno)
FOR job IN ('CLERK', 'SALESMAN', 'MANAGER', 'ANALYST', 'PRESIDENT')
);
 
결과 느낌
  • DEPTNO | CLERK | SALESMAN | MANAGER | ANALYST | PRESIDENT
  • 10 | 1 | 0 | 1 | 0 | 1
  • 20 | 2 | 0 | 1 | 2 | 0
  • 30 | 1 | 4 | 1 | 0 | 0

한 줄 해석: “10번 부서는 CLERK 1명, MANAGER 1명…”처럼 보고서 표가 됩니다.


예시 2) “집계함수를 여러 개 쓸 수도 있다”

이미지에서 SUM(SAL)과 COUNT(*)를 동시에 넣어서,
부서별/직무별로 급여합+인원수를 한 번에 뽑는 예가 나옵니다.

예시 형태(핵심만):

PIVOT (
SUM(sal) AS sal_sum,
COUNT(*) AS cnt
FOR deptno IN (10 AS dept10, 20 AS dept20)
);
 
 
 

그러면 열이

  • DEPT10_SAL_SUM, DEPT10_CNT, DEPT20_SAL_SUM, DEPT20_CNT
    처럼 “집계함수별 컬럼”으로 여러 개 만들어집니다.

2) UNPIVOT 절 요약: “열로 펼쳐진 것을 다시 행으로 접는다”

개념

  • PIVOT 결과처럼 가로로 넓어진 컬럼들을 다시
  • 분석하기 쉬운 세로(long) 형태로 바꿉니다.

기본 형태(이미지 내용)

SELECT ...
FROM (피벗된 테이블 또는 SELECT)
UNPIVOT (
값컬럼 FOR 구분컬럼 IN (접을 컬럼들...)
);
 
  • 값컬럼: 실제 값이 들어갈 컬럼(예: SAL)
  • FOR 구분컬럼: “이 값이 원래 어떤 컬럼에서 왔는지” 표시(예: DEPTNO 역할)
  • IN: 접을 대상 컬럼 목록(예: DEPT10_ACCOUNTING_SAL, DEPT20_RESEARCH_SAL)

예시) 피벗 테이블을 다시 세로로

피벗 테이블에 이런 컬럼이 있을 때:

  • DEPT10_ACCOUNTING_SAL
  • DEPT20_RESEARCH_SAL

UNPIVOT을 하면:

  • DEPTNO 컬럼에는 “DEPT10_ACCOUNTING_SAL / DEPT20_RESEARCH_SAL” 같은 라벨이 들어가고
  • SAL 컬럼에는 실제 급여 값이 들어갑니다.
SELECT job, deptno, sal
FROM emp_pivot
UNPIVOT (
sal FOR deptno IN (dept10_accounting_sal, dept20_research_sal)
)
ORDER BY job, deptno;
 
결과 느낌
  • JOB | DEPTNO | SAL
  • CLERK | DEPT10_ACCOUNTING_SAL | 1300
  • CLERK | DEPT20_RESEARCH_SAL | 1900
  • MANAGER | DEPT10_ACCOUNTING_SAL | 2450
  • MANAGER | DEPT20_RESEARCH_SAL | 2975

3) 한 번에 이해하는 비유(엑셀)

  • PIVOT: 엑셀 피벗테이블처럼 “요약표(가로로 펼친 표)” 만들기
  • UNPIVOT: 그 요약표를 다시 “원본 분석용 세로형 데이터”로 되돌리기

4) 시험/실무 포인트(자주 틀리는 부분)

  1. PIVOT의 IN 목록은 보통 직접 적는다
    (JOB 값이 무엇인지 모르면 결과 열을 만들 수가 없음)
  2. PIVOT은 거의 항상 집계함수(COUNT/SUM/AVG 등)와 함께 쓴다.
  3. UNPIVOT은 “가로로 많아진 컬럼”“행으로 접는 작업”이라서
    값 컬럼과 구분 컬럼을 정확히 잡아야 한다.

최종 한 줄 요약

  • PIVOT: “행 → 열”로 바꿔서 보고서 표 만들기(집계 포함)
  • UNPIVOT: “열 → 행”으로 되돌려 분석하기 좋은 형태로 만들기
반응형