2과목. SQL 기본 및 활용
2장. SQL 활용
7절. PIVOT 절과 UNPIVOT 절
# 데이터의 구조
① LONG DATA(Tidy data)
- 하나의 속성이 하나의 컬럼으로 정의되어 값들이 여러 행으로 쌓이는 구조
- RDBMS의 테이블 설계 방식
- 다른 테이블과의 조인 연산이 가능한 구조
② WIDE DATA(Cross table)
- 행과 컬럼에 유의미한 정보 전달을 목적으로 작성하는 교차표
- 하나의 속성값이 여러 컬럼으로 분리되어 표현
- RDBMS 에서 WIDE 형식으로 테이블 설계 시 값이 추가될 때마다 컬럼이 추가되어야 하기에 비효율적임
- 다른 테이블과의 조인 연산이 불가함
- 주로 데이터를 요약할 목적으로 사용
# 데이터 구조 변경
① PIVOT: LONG ➪ WIDE
② UNPIVOT: WIDE ➪ LONG
# PIVOT
- 교차표를 만드는 기능
- STACK 컬럼, UNSTACK 컬럼, VALUE 컬럼의 정의가 중요함
- FROM 절에 STACK, UNSTACK, VALUE 컬럼명만 정의 필요
- PIVOT 절에 UNSTACK, VALUE 컬럼명 정의
- PIVOT절 IN 연산자에 UNSTACK 컬럼 값을 정의
- FROM 절에 선언된 컬럼 중 PIVOT 절에서 선언한 VALUE 컬럼, UNSTACK 컬럼을 제외한 모든 컬럼은 STACK 컬럼이 됨
- 문법
SELECT *
FROM 테이블명 or 서브쿼리
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 테이블명 or 서브쿼리
UNPIVOT(VALUE 컬럼명 FOR STACK컬럼명 IN (값1, 값2, ….));
'🖊️Certificate > 📌SQLD' 카테고리의 다른 글
[SQLD] 2과목 - 3장) 1절. DML (0) | 2024.03.07 |
---|---|
[SQLD] 2과목 - 2장) 8절. 정규 표현식 (1) | 2024.03.07 |
[SQLD] 2과목 - 2장) 6절. 계층형 질의와 셀프 조인 (0) | 2024.03.07 |
[SQLD] 2과목 - 2장) 5절. Top N 쿼리 (0) | 2024.03.07 |
[SQLD] 2과목 - 2장) 4절. 윈도우 함수 (0) | 2024.03.07 |
댓글