[SQL 개념 정리 14] PIVOT절과 UNPIVOT절프로그래밍 언어/SQL2024. 11. 15. 16:10
Table of Contents
PIVOT과 UNPIVOT은 SQL에서 데이터 형식을 변환하거나 재구성하는 데 사용되는 구문입니다. 이 구문은 데이터를 분석할 때 가독성과 효율성을 높이기 위해 열과 행을 변환하는 데 매우 유용합니다.
PIVOT
PIVOT은 행 데이터를 열로 변환하여 데이터를 요약하고 구조를 재구성할 때 사용됩니다.
기본 구문
SELECT *
FROM table_name
PIVOT (
aggregate_function(value_column)
FOR pivot_column IN (value1, value2, value3, ...)
) AS pivot_table;
- aggregate_function: 데이터를 요약하는 집계 함수 (예: SUM, AVG, COUNT 등).
- pivot_column: 행 데이터를 열로 변환할 기준이 되는 열.
- value_column: 집계할 값이 있는 열.
- value1, value2, value3: 열로 변환될 고유 값들.
예시: 판매 데이터 피벗
데이터 테이블: sales_data
product | year | sales |
A | 2020 | 100 |
A | 2021 | 150 |
B | 2020 | 200 |
B | 2021 | 250 |
PIVOT 사용:
SELECT *
FROM sales_data
PIVOT (
SUM(sales)
FOR year IN (2020, 2021)
) AS pivot_table;
결과:
product | 2020 | 2021 |
A | 100 | 150 |
B | 200 | 250 |
UNPIVOT
UNPIVOT은 열 데이터를 행으로 변환하여 데이터를 더 세분화하거나 분석하기 쉬운 형태로 변환할 때 사용됩니다.
기본 구문
SELECT pivot_column, value_column
FROM table_name
UNPIVOT (
value_column FOR pivot_column IN (column1, column2, column3, ...)
) AS unpivot_table;
- value_column: 행으로 변환된 값이 포함될 열.
- pivot_column: 행으로 변환될 열 이름.
- column1, column2, column3: 행으로 변환할 기존 열.
예시: 판매 데이터 언피벗
피벗된 데이터 테이블: sales_summary
product | 2020 | 2021 |
A | 100 | 150 |
B | 200 | 250 |
UNPIVOT 사용:
SELECT product, year, sales
FROM sales_summary
UNPIVOT (
sales FOR year IN (2020, 2021)
) AS unpivot_table;
결과:
product | year | sales |
A | 2020 | 100 |
A | 2021 | 150 |
B | 2020 | 200 |
B | 2021 | 250 |
PIVOT과 UNPIVOT
PIVOT과 UNPIVOT의 활용 비교
특징 | PIVOT | UNPIVOT |
목적 | 행 데이터를 열로 변환 | 열 데이터를 행으로 변환 |
주요 활용 | 데이터 요약, 가독성 향상 | 데이터 세분화, 원시 데이터로 복원 |
사용 구문 | PIVOT (aggregate_function) | UNPIVOT (value FOR column) |
결과 형태 | 여러 행 → 하나의 요약된 행 | 여러 열 → 여러 행 |
주의사항
- PIVOT/UNPIVOT은 MySQL에서 직접 지원되지 않음
- MySQL은 기본적으로 PIVOT과 UNPIVOT 구문을 지원하지 않습니다. 대신 CASE 문과 GROUP BY를 사용하여 PIVOT 기능을 구현하거나, UNION ALL을 활용하여 UNPIVOT을 수동으로 처리할 수 있습니다.
- MySQL에서 PIVOT 구현 예시
SELECT product,
SUM(CASE WHEN year = 2020 THEN sales ELSE 0 END) AS "2020",
SUM(CASE WHEN year = 2021 THEN sales ELSE 0 END) AS "2021"
FROM sales_data
GROUP BY product;
- MySQL에서 UNPIVOT 구현 예시
SELECT product, '2020' AS year, sales_2020 AS sales
FROM sales_summary
UNION ALL
SELECT product, '2021' AS year, sales_2021 AS sales
FROM sales_summary;
요약 ✍️
- PIVOT: 행 데이터를 열로 변환하여 요약된 데이터 형태로 표현.
- UNPIVOT: 열 데이터를 행으로 변환하여 더 세분화된 데이터를 제공.
- MySQL은 직접적으로 PIVOT과 UNPIVOT을 지원하지 않으므로, CASE 문, GROUP BY, UNION ALL을 사용하여 구현 가능.
이 두 기능은 데이터를 효율적으로 변환하여 분석하거나 시각화하는 데 유용합니다.
PIVOT과 UNPIVOT은 데이터의 구조를 효율적으로 변환하여 분석의 가독성과 깊이를 더해주는 SQL 기능입니다. MySQL에서는 직접적인 지원이 없지만, CASE 문과 UNION ALL을 통해 유사한 결과를 얻을 수 있습니다.
728x90
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL 개념 정리 16] SQL을 활용한 데이터 모델링 1️⃣ (데이터 모델링 기초 이해, 데이터 모델링의 구성 요소, 정규화와 비정규화, 데이터베이스 키와 무결성 제약 조건) (2) | 2024.11.18 |
---|---|
[SQL 개념 정리 15] 정규표현식 (1) | 2024.11.15 |
[SQL 개념 정리 13] 계층형 질의와 셀프 조인 (1) | 2024.11.15 |
[SQL 개념 정리 12] Top N 쿼리 (0) | 2024.11.15 |
[SQL 개념 정리 11] 그룹함수 (0) | 2024.11.15 |
@ourkofe's story :: ourkofe
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!