ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle PIVOT과 UNPIVOT 쿼리 사용법과 예제 🌟
    데이터 엔지니어링/SQL 2024. 12. 11. 20:40
    반응형

    Oracle의 **PIVOT**과 **UNPIVOT**는 데이터를 가로와 세로 형태로 변환하는 데 사용됩니다. 특히, 집계 데이터를 테이블로 표현하거나, 열 데이터를 행으로 변환할 때 매우 유용합니다.


    1. PIVOT과 UNPIVOT의 개념

    1) PIVOT

    • 행 데이터를 열 데이터로 변환합니다.
    • 주로 집계 함수와 함께 사용하여 데이터를 요약하거나 테이블을 재구성합니다.

    2) UNPIVOT

    • 열 데이터를 행 데이터로 변환합니다.
    • 여러 열에 분리된 데이터를 단일 열로 통합하는 데 유용합니다.

    2. PIVOT 사용법과 예제

    기본 구조:

    SELECT * 
    FROM (
        SELECT <컬럼1>, <컬럼2>, <값>
        FROM <테이블>
    ) 
    PIVOT (
        <집계 함수>(<값>)
        FOR <컬럼>
        IN (<열1>, <열2>, ...)
    );

    예제 1: 월별 매출 데이터를 열로 변환

    샘플 테이블: SALES

    YEARMONTHSALES

    2023 JAN 100
    2023 FEB 200
    2023 MAR 150
    2023 JAN 120
    2023 FEB 180

    PIVOT 쿼리

    SELECT *
    FROM (
        SELECT YEAR, MONTH, SALES
        FROM SALES
    ) 
    PIVOT (
        SUM(SALES) -- 집계 함수
        FOR MONTH IN ('JAN' AS JANUARY, 'FEB' AS FEBRUARY, 'MAR' AS MARCH)
    );

    결과

    YEARJANUARYFEBRUARYMARCH

    2023 220 380 150

    예제 2: 여러 기준으로 데이터 변환

    샘플 테이블: EMPLOYEES

    DEPARTMENTJOB_TITLESALARY

    HR MANAGER 5000
    HR CLERK 2000
    IT MANAGER 6000
    IT CLERK 3000

    PIVOT 쿼리

    SELECT *
    FROM (
        SELECT DEPARTMENT, JOB_TITLE, SALARY
        FROM EMPLOYEES
    ) 
    PIVOT (
        MAX(SALARY) -- 최고 연봉
        FOR JOB_TITLE IN ('MANAGER' AS MANAGER_SALARY, 'CLERK' AS CLERK_SALARY)
    );

    결과

    DEPARTMENTMANAGER_SALARYCLERK_SALARY

    HR 5000 2000
    IT 6000 3000

    3. UNPIVOT 사용법과 예제

    기본 구조:

    SELECT <컬럼>, <변환 후 열>, <값>
    FROM (
        SELECT <여러 열>
        FROM <테이블>
    ) 
    UNPIVOT (
        <값> FOR <변환 후 열> IN (<열1>, <열2>, ...)
    );

    예제 1: 열 데이터를 행 데이터로 변환

    샘플 테이블: SALES_PIVOTED

    YEARJANUARYFEBRUARYMARCH

    2023 220 380 150

    UNPIVOT 쿼리

    SELECT YEAR, MONTH, SALES
    FROM (
        SELECT YEAR, JANUARY, FEBRUARY, MARCH
        FROM SALES_PIVOTED
    ) 
    UNPIVOT (
        SALES FOR MONTH IN (JANUARY AS 'JAN', FEBRUARY AS 'FEB', MARCH AS 'MAR')
    );

    결과

    YEARMONTHSALES

    2023 JAN 220
    2023 FEB 380
    2023 MAR 150

    예제 2: 직원 급여 데이터를 열에서 행으로 변환

    샘플 테이블: DEPARTMENT_SALARIES

    DEPARTMENTMANAGER_SALARYCLERK_SALARY

    HR 5000 2000
    IT 6000 3000

    UNPIVOT 쿼리

    SELECT DEPARTMENT, JOB_TITLE, SALARY
    FROM (
        SELECT DEPARTMENT, MANAGER_SALARY, CLERK_SALARY
        FROM DEPARTMENT_SALARIES
    ) 
    UNPIVOT (
        SALARY FOR JOB_TITLE IN (MANAGER_SALARY AS 'MANAGER', CLERK_SALARY AS 'CLERK')
    );

    결과

    DEPARTMENTJOB_TITLESALARY

    HR MANAGER 5000
    HR CLERK 2000
    IT MANAGER 6000
    IT CLERK 3000

    4. PIVOT과 UNPIVOT의 조합

    예제: 월별 매출 데이터를 다시 행 형태로 변환

    1) PIVOT 데이터 생성

    SELECT *
    FROM (
        SELECT YEAR, MONTH, SALES
        FROM SALES
    ) 
    PIVOT (
        SUM(SALES)
        FOR MONTH IN ('JAN' AS JANUARY, 'FEB' AS FEBRUARY, 'MAR' AS MARCH)
    );

    2) UNPIVOT으로 다시 변환

    SELECT YEAR, MONTH, SALES
    FROM (
        SELECT YEAR, JANUARY, FEBRUARY, MARCH
        FROM SALES_PIVOTED
    ) 
    UNPIVOT (
        SALES FOR MONTH IN (JANUARY AS 'JAN', FEBRUARY AS 'FEB', MARCH AS 'MAR')
    );

    결과는 원래의 행 데이터와 동일합니다.


    5. PIVOT과 UNPIVOT의 활용 사례

    1. PIVOT
      • 매출 데이터 요약: 월별, 지역별, 제품별 매출 데이터 정리.
      • 집계 분석: 특정 범주의 데이터 통계 계산.
    2. UNPIVOT
      • 데이터 통합: 여러 열을 하나로 묶어 분석.
      • 정형 데이터 변환: 복잡한 열 기반 데이터를 행 기반으로 전환하여 가독성 향상.

    Oracle의 PIVOT과 UNPIVOT은 데이터 분석과 정리에 매우 유용한 도구입니다. 다양한 데이터 형태를 처리할 때 활용해 보세요! 😊

    반응형

    댓글

Designed by Tistory.