오라클 SQL · 고급 질의

PIVOT, UNPIVOT, WITH절 활용

데이터 형태를 회전시키거나 중간 결과를 이름 붙여 재사용하면 복잡한 SQL도 훨씬 읽기 쉬워진다. PIVOT, UNPIVOT, WITH절은 보고서형 SQL에서 특히 빛나는 도구다.

PIVOT, UNPIVOT, WITH절 활용 대표 이미지

이 글에서 꼭 잡아야 할 것

데이터 형태를 회전시키거나 중간 결과를 이름 붙여 재사용하면 복잡한 SQL도 훨씬 읽기 쉬워진다. PIVOT, UNPIVOT, WITH절은 보고서형 SQL에서 특히 빛나는 도구다.

고급 SQL은 결과를 만드는 것뿐 아니라 읽을 수 있게 만드는 기술이기도 하다. WITH절은 복잡한 계산을 작은 블록으로 분리해 주고, PIVOT 계열 문법은 결과 표현 방식을 바꿔 데이터 해석을 훨씬 쉽게 만들어 준다.

난이도 고급
모듈 고급 질의
학습 시간 11분
핵심 키워드 PIVOT, UNPIVOT, WITH

개념 지도와 이해 포인트

행을 열로 PIVOT은 특정 값들을 열로 펼쳐 교차표 형태를 만든다. 월별 실적, 카테고리별 건수 보고서에 자주 쓰인다.
열을 행으로 UNPIVOT은 넓은 표 구조를 다시 세로 구조로 바꾼다. 컬럼 중심 데이터를 정규형 구조로 풀어낼 때 유용하다.
공통 테이블 식 WITH절은 중간 결과에 이름을 붙여 SQL을 단계별로 읽기 쉽게 만든다. 복잡한 서브쿼리 반복을 줄이는 데도 효과적이다.
PIVOT, UNPIVOT, WITH절 활용 개념 다이어그램

대표 문법 패턴

WITH sales_base AS (
  SELECT dept_id, sales_month, amount
  FROM monthly_sales
)
SELECT *
FROM sales_base
PIVOT (
  SUM(amount)
  FOR sales_month IN ('JAN' AS jan, 'FEB' AS feb, 'MAR' AS mar)
);

문법 읽는 포인트

  • WITH절은 복잡한 SQL을 단계별로 정리하는 데 매우 유용하다.
  • PIVOT은 집계 함수와 함께 쓰이는 경우가 많다.
  • UNPIVOT은 반대로 열 구조를 다시 행 구조로 돌린다.

핵심 용어

  • PIVOT
  • UNPIVOT
  • WITH

월별 실적을 가로 표로 전환하기

복잡한 변형 SQL일수록 한 번에 읽으려 하지 말고, WITH절의 소스 결과를 먼저 상상한 뒤 최종 변환 단계로 넘어가는 방식이 훨씬 안정적이다.

WITH src AS (
  SELECT department_id, TO_CHAR(order_date, 'MM') AS order_month, amount
  FROM orders
)
SELECT *
FROM src
PIVOT (
  SUM(amount)
  FOR order_month IN ('01' AS m01, '02' AS m02, '03' AS m03)
)
ORDER BY department_id;

수험 체크포인트와 자주 하는 실수

시험 체크포인트

  • WITH절은 가독성을 높이는 도구라는 관점으로 접근하면 구조가 잘 읽힌다.
  • PIVOT은 행을 열로 바꾸되 집계가 함께 일어난다는 점을 기억하자.
  • UNPIVOT은 정반대 방향 전환이라는 이미지를 갖고 있으면 좋다.

자주 하는 실수

  • PIVOT 전에 필요한 집계 기준을 명확히 잡지 않는 실수
  • WITH절을 단순 별칭과 같은 수준으로 보는 실수
  • 변형 전후 데이터 구조를 눈으로 그리지 않고 문법만 따라가는 실수

연결 학습

고급 조회 문법이 어느 정도 정리되었다면 이제 데이터 구조 자체를 만드는 DDL로 넘어간다. 다음 챕터에서는 CREATE, ALTER, DROP을 다룬다.

댓글 0

작성자 이름과 댓글 내용을 입력하면 바로 등록됩니다. 답글은 한 단계까지 지원하고, 댓글은 최대 200자까지 작성할 수 있습니다.

일반 댓글 작성

댓글을 불러오는 중입니다.

같은 카테고리에서 이어서 읽기

지금 읽은 글과 가까운 흐름의 글 5개를 모아 두었습니다. 바로 앞뒤 문맥을 이어서 읽고 싶을 때 가장 편합니다.