프로그래밍 언어/SQL
[SQL 개념 정리 14] PIVOT절과 UNPIVOT절
ourkofe's story
2024. 11. 15. 16:10
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