[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - PIVOT 과 UNPIVOT
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,...));
ex) EMP 테이블에서 아래와 같이 JOB별 DEPTNO 별 도수(COUNT) 출력
SELECT *
FROM (SELECT EMPNO, JOB, DEPTNO FROM EMP)
PIVOT (COUNT(EMPNO) FOR DEPTNO IN (10,20,30));
→ FROM 절 서브쿼리 안애 JOB이 없으면 아래와 같이 그냥 부서별로 도수가 출력됨
SELECT *
FROM (SELECT EMPNO, DEPTNO FROM EMP)
PIVOT (COUNT(EMPNO) FOR DEPTNO IN (10,20,30));
→ FROM 절에 서브쿼리로 컬럼을 제한하지 않으면 STACK 컬럼이 많아짐 (EMPNO, DEPTNO 컬럼 제외 모든 컬럼이 STACK 처리)
UNPIVOT
- WIDE 데이터를 LONG 데이터로 변경하는 문법
- STACK 컬럼: 이미 UNSTACK 되어 있는 여러 컬럼을 하나의 컬럼으로 STACK 시 새로 만들 컬럼이름 (사용자 정의)
- VALUE 컬럼: 교차표에서 셀 자리(VALUE)값을 하나의 컬럼으로 표현하고자 할 떄 새로 만들 컬럼명 (사용자 정의)
- 값1, 값2, ... : 실제 UNSTACK 되어 있는 컬럼 이름들
- 문법
SELECT * FROM 테이블명 또는 서브쿼리 PIVOT (VALUE 컬럼명 FOR STACK컬럼명 IN (값1, 값2, 값3,...));
ex) 위 UNSTACK_TEST PIVOT의 결과가 STACK_TEST 테이블에 저장되어 있을 때, 다시 STACK_TEST 테이블 값을 UNSTACK_TEST 형태로 변경 (STACK 처리)
SELECT *
FROM STACK_TEST
UNPIVOT (CNT FOR 년도 IN ("2008", "2009"));
→ IN 뒤에 값은 UNSTACK 데이터의 컬럼명이 숫자이지만 컬럼명은 문자로 저장되므로 쌍따옴표 전달 필요
반응형
'스터디 > SQL' 카테고리의 다른 글
2024년 54회차 SQLD 자격증 시험 후기, 공부법 (14) | 2024.09.03 |
---|---|
[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - 정규표현식 (18) | 2024.09.02 |
[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - 계층형 질의 (29) | 2024.08.28 |
[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - TOP N QUERY (29) | 2024.08.27 |
[기출문제] 2과목(SQL기본.1) - 2024 개정판, 해설 포함 (88) | 2024.08.23 |