TOP
class="layout-aside-left paging-number">
본문 바로가기
자격증/SQLD

[SQLD] PIVOT/UNPIVOT (보강-1)

by 기록자_Recordian 2024. 3. 1.
728x90
반응형

해당 범위는 SQLD 2024년에 추가된 범위라 기존 내용이 많이 부족하여 추가하였습니다.

 

기존내용
 

SQLD 2과목 SQL 활용 - PIVOT 절과 UNPIVOT 절

서브쿼리 집합연산자 그룹 함수 윈도우 함수 TOP N 쿼리 계층형 질의와 셀프 조인 PIVOT 절과 UNPIVOT 절 정규 표현식 ※ 자료출처: 데이터 산업 진흥원(K-DATA) & 마이크로소프트 시작하기에 앞서.. 해

puppy-foot-it.tistory.com


PIVOT / UNPIVOT (데이터의 구조를 변경하는 기능)
출처: 홍쌤의 데이터랩 유튜브

 

  • 데이터의 구조

1) LONG DATA (Tidy Data)

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

- RDBMS의 테이블 설계 방식

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

 

LONG DATA

 

2) WIDE DATA (Cross Table)

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

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

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

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

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

 

WIDE DATA


DATA 구조변경

 

1) PIVOT: LONG → WIDE

2) UNPIVOT: WIDE →  LONG

 

■ PIVOT

- 교차표를 만드는 기능

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

- FROM 절에 STACK, 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 컬럼 모두 명시

 

예제1. EMPLOYEE 테이블에서 아래와 같이 JOB_ID별 DEPARTNMENT_ID 별 도수 (COUNT) 출력하는 SQL문 작성

 

[아래]

 

[정답 SQL문]

 

[풀이]

 

 

※ FROM 절 서브쿼리 안에 JOB_ID 가 없으면 그냥 부서별로의 도수(COUNT) 출력

※ FROM 절에 서브쿼리로 컬럼을 제한하지 않으면 STACK 컬럼이 많아짐.

▶ FROM 절에 서브쿼리로 필요한 컬럼만 정의하지 않으면 EMPLOYEES 테이블의 모든 컬럼 중 PIVOT 절에 선언된 EMPLOYEE_ID, DEPARTMENT_ID 컬럼을 제외한 모든 컬럼이 STACK 처리 됨.


예제2. 아래 테이블에서 성별, 연도별, 구매량 총 합 표현 SQL문 작성

 

[아래]

년도 성별 지역 구매량
2008 남자 서울 1
2008 남자 경기 2
2008 여자 서울 3
2008 여자 경기 4
2009 남자 서울 5
2009 남자 경기 6
2009 여자 서울 7
2009 여자 경기 8

 

성별 2008 2009
남자 3 11
여자 7 15

 

[정답 SQL문]

SELECT *
FROM (SELECT 년도, 성별, 구매량 FROM SALES)
PIVOT (SUM(구매량) FOR 년도 IN (2008, 2009));

 


다음글

[SQLD] PIVOT / UNPIVOT (보강-2)


 

 

[출처]

홍쌤의 데이터 랩 유튜브

 

728x90
반응형