[SQL] PIVOT과 UNPIVOT

먼저, 데이터의 구조를 알아보고, Oracle에서 사용하는 `PIVOT`과 `UNPIVOT`에 대해 알아보자. 데이터의 구조는 `Long Data`(Tidy Data)와 `Wide Data`(Cross Table)가 있다. 일반적으로 우리가 잘 알고 있는 RDB는 Long Data이며, 그것을 90도 돌린 것이 Wide Data라고 생각하면 된다. PIVOT은 Long Data를 Wide Data로 바꾸는 것이며, UNPIVOT은 반대로 Wide Data를 Long Data로 바꾸는 것이다.
Hi's avatar
Sep 02, 2024
[SQL] PIVOT과 UNPIVOT

💡
먼저, 데이터의 구조를 알아보고, Oracle에서 사용하는 PIVOTUNPIVOT에 대해 알아보자.
데이터의 구조는 Long Data(Tidy Data)와 Wide Data(Cross Table)가 있다. 일반적으로 우리가 잘 알고 있는 RDB는 Long Data이며, 그것을 90도 돌린 것이 Wide Data라고 생각하면 된다.
PIVOT은 Long Data를 Wide Data로 바꾸는 것이며, UNPIVOT은 반대로 Wide Data를 Long Data로 바꾸는 것이다.
 

✅ 1. 데이터의 구조

💡
데이터의 구조는 Long Data와 Wide Data가 있다.
 

☑️ 1) Long Data (Tidy Data)

notion image
  • 하나의 속성이 하나의 컬럼으로 정의되어 값들이 여러 행으로 쌓이는 구조
  • RDBMS의 테이블 설계 방식
  • 다른 테이블과의 조인 연산이 가능한 구조
 
 

☑️ 2) Wide Data (Cross Table)

notion image
  • 행과 컬럼에 유의미한 정보 전달을 목적으로 작성하는 교차표
  • 하나의 속성값이 여러 컬럼으로 분리되어 표현
  • RDBMS에서 Wide 형식으로 테이블 설계 시 값이 추가될 때마다 컬럼이 추가되어야 하므로 비효율적임
  • 다른 테이블과의 조인 연산이 불가능
  • 주로 데이터를 요약하는 목적으로 사용
 
 

✅ 2. 데이터 구조 변경

☑️ 1) PIVOT (LONG → WIDE)

💡
PIVOT은 Long Data를 Wide Data로 바꾸는 것
notion image
  • 교차표를 만드는 기능
  • STACK 컬럼, UNSTACK 컬럼, VALUE 컬럼 3가지 컬럼이 존재
  • FROM 절에 STACK, UNSTACK, VALUE 컬럼명 정의 필요 (필요 시 서브쿼리를 사용하여 컬럼 제한)
  • PIVOT 절에 UNSTACK, VALUE 컬럼명 정의
  • PIVOT 절 IN 연산자에 UNSTACK 컬럼 값을 정의
  • FROM 절에 선언된 컬럼 중 PIVOT 절에서 선언한 VALUE 컬럼, UNSTACK 컬럼을 제외한 모든 컬럼은 STACK 컬럼이 됨.
notion image
 
  • 문법
    • notion image
 
 

☑️ 2) UNPIVOT (WIDE → LONG)

💡
UNPIVOT은 Wide Data를 Long Data로 바꾸는 것
notion image
 
Share article
RSSPowered by inblog