반응형
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) 시험/실무 포인트(자주 틀리는 부분)
- PIVOT의 IN 목록은 보통 직접 적는다
(JOB 값이 무엇인지 모르면 결과 열을 만들 수가 없음) - PIVOT은 거의 항상 집계함수(COUNT/SUM/AVG 등)와 함께 쓴다.
- UNPIVOT은 “가로로 많아진 컬럼”을 “행으로 접는 작업”이라서
값 컬럼과 구분 컬럼을 정확히 잡아야 한다.
최종 한 줄 요약
- PIVOT: “행 → 열”로 바꿔서 보고서 표 만들기(집계 포함)
- UNPIVOT: “열 → 행”으로 되돌려 분석하기 좋은 형태로 만들기
반응형
'sqld' 카테고리의 다른 글
| 정규표현식에 대해 자세히 알아보자! (0) | 2026.02.26 |
|---|---|
| self join과 계층형질의 (0) | 2026.02.26 |
| Top N 쿼리가 무엇인가요? (0) | 2026.02.25 |
| 윈도우함수가 무엇인가? (1) | 2026.02.25 |
| 그룹함수 (0) | 2026.02.24 |