-
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의 활용 사례
- PIVOT
- 매출 데이터 요약: 월별, 지역별, 제품별 매출 데이터 정리.
- 집계 분석: 특정 범주의 데이터 통계 계산.
- UNPIVOT
- 데이터 통합: 여러 열을 하나로 묶어 분석.
- 정형 데이터 변환: 복잡한 열 기반 데이터를 행 기반으로 전환하여 가독성 향상.
Oracle의 PIVOT과 UNPIVOT은 데이터 분석과 정리에 매우 유용한 도구입니다. 다양한 데이터 형태를 처리할 때 활용해 보세요! 😊
반응형'데이터 엔지니어링 > SQL' 카테고리의 다른 글
ORACLE 계층형 쿼리(Hierarchical Query)란? (CONNECT BY, START WITH, LEVEL, SYS_CONNECT_BY_PATH, PRIOR) (0) 2024.12.11 Oracle 문자열 분리 Split: 방법과 활용 예시 (0) 2024.11.15 Oracle에서 INSERT INTO 사용법 및 실용적인 예제 5가지 (0) 2024.11.15 DB Isolation(데이터베이스 격리)란? (0) 2024.11.15 Oracle UPDATE 문 사용법과 다양한 예제 모음 (0) 2024.11.14