본문 바로가기
스터디/SQL

[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - PIVOT 과 UNPIVOT

by 견습생L 2024. 8. 31.

 

[정리노트] 데이터분석 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 데이터의 컬럼명이 숫자이지만 컬럼명은 문자로 저장되므로 쌍따옴표 전달 필요

 

반응형