데이터베이스(DB)/SQLD

[SQLD 2-2-7] SQL 활용 - PIVOT 절과 UNPIVOT 절

송기동 2024. 6. 15. 14:23
728x90

데이터의 구조

# LONG DATA (Tidy data)

- 하나의 속성이 하나의 컬럼으로 정의되어 값들이 여러 행으로 쌓이는 구조

- RDBMS 의 테이블 설계 방식

- 다른 테이블과의 조인 연산이 가능한 구조

# WIDE DATA (Cross data)

- 행과 컬럼에 유의미한 정보 전달을 목적으로 작성하는 교차표

- 하나의 속성값이 여러 컬럼으로 분리되어 표현

- RDBMS 에서 WIDE 형식으로 테이블 설계 시 값이 추가될 때 마다 컬럼이 추가돼야 하므로 비효율적

- 다른 테이블과의 조인 연산 불가

- 주로 데이터를 요약할 목적으로 사용


PIVOT 절

- 교차표를 만드는 기능

- STACK 컬럼, UNSTACK 컬럼, VALUE 컬럼의 정의가 중요!

- FROM 절에 SATCK, UNSTACK, VALUE 컬럼명만 정의 (필요 시 서브쿼리 사용하여 필요 컬럼 제한)

- PIVOT 절에 UNSTACK, VALUE 컬럼명 정의

- PIVOT 절 IN 연산자에 UNSTACK 컬럼 값을 정의

- FROM 절에 선언된 컬럼중 PIVOT 절에 선언한 VALUE 컬럼, UNSTACK 컬럼을 제외한 모든 컬럼은 STACK 컬럼이 됨

# 문법

SELECT *
FROM 테이블명 또는 서브쿼리
PIVOT (VALUE 컬럼명 FOR UNSTACK 컬럼명 IN (값1, 값2, 값3));

 

※ 반드시 FROM 절에 STACK 컬럼, UNSTACK 컬럼, VALUE 컬럼 모두 명시

UNPIVOT 절

- WIDE 데이터를 LONG 데이터로 변경하는 문법

- STACK 컬럼 : 이미 UNSTACK 되어 있는 여러 컬럼을 하나의 컬럼으로 STACK 시 새로 만들 컬럼이름(사용자 정의)

- VALUE 컬럼 : 교차표에서 셀 자리(VALUE) 값을 하나의 컬럼으로 표현하고자 할 때 새로 만들 컬럼명(사용자 정의)

- 값1, 값2 ... : 실제 UNSTACK 되어 있는 컬럼이름들

# 문법

SELECT *
FROM 테이블명 또는 서브쿼리
UNVIPOT (VALUE 컬럼명 FOR STACK 컬럼명 IN (값1, 값2, ...));

 

 

728x90