[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로 바꾸는 것이다.
Sep 02, 2024
먼저, 데이터의 구조를 알아보고, 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로 바꾸는 것이다.
✅ 1. 데이터의 구조☑️ 1) Long Data (Tidy Data)☑️ 2) Wide Data (Cross Table)✅ 2. 데이터 구조 변경☑️ 1) PIVOT (LONG → WIDE)☑️ 2) UNPIVOT (WIDE → LONG)
✅ 1. 데이터의 구조
데이터의 구조는 Long Data와 Wide Data가 있다.
☑️ 1) Long Data (Tidy Data)
- 하나의 속성이 하나의 컬럼으로 정의되어 값들이 여러 행으로 쌓이는 구조
- RDBMS의 테이블 설계 방식
- 다른 테이블과의 조인 연산이 가능한 구조
☑️ 2) Wide Data (Cross Table)
- 행과 컬럼에 유의미한 정보 전달을 목적으로 작성하는 교차표
- 하나의 속성값이 여러 컬럼으로 분리되어 표현
- RDBMS에서 Wide 형식으로 테이블 설계 시 값이 추가될 때마다 컬럼이 추가되어야 하므로 비효율적임
- 다른 테이블과의 조인 연산이 불가능
- 주로 데이터를 요약하는 목적으로 사용
✅ 2. 데이터 구조 변경
☑️ 1) PIVOT (LONG → WIDE)
PIVOT은 Long Data를 Wide Data로 바꾸는 것
- 교차표를 만드는 기능
- STACK 컬럼, UNSTACK 컬럼, VALUE 컬럼 3가지 컬럼이 존재
- FROM 절에 STACK, UNSTACK, VALUE 컬럼명 정의 필요 (필요 시 서브쿼리를 사용하여 컬럼 제한)
- PIVOT 절에 UNSTACK, VALUE 컬럼명 정의
- PIVOT 절 IN 연산자에 UNSTACK 컬럼 값을 정의
- FROM 절에 선언된 컬럼 중 PIVOT 절에서 선언한 VALUE 컬럼, UNSTACK 컬럼을 제외한 모든 컬럼은 STACK 컬럼이 됨.
- 문법
☑️ 2) UNPIVOT (WIDE → LONG)
UNPIVOT은 Wide Data를 Long Data로 바꾸는 것
Share article