프로그래밍 언어/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)
결과 형태 여러 행 → 하나의 요약된 행 여러 열 → 여러 행

주의사항

  1. PIVOT/UNPIVOT은 MySQL에서 직접 지원되지 않음
    • MySQL은 기본적으로 PIVOT과 UNPIVOT 구문을 지원하지 않습니다. 대신 CASE 문GROUP BY를 사용하여 PIVOT 기능을 구현하거나, UNION ALL을 활용하여 UNPIVOT을 수동으로 처리할 수 있습니다.
  2. 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;
  1. 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