본문 바로가기
카테고리 없음

SQL의 PIVOT과 UNPIVOT 함수 이해하기

by moment-love 2025. 1. 27.

 

SQL의 PIVOT과 UNPIVOT 함수 이해하기

 

데이터를 분석하거나 보고서를 작성할 때, 행 데이터를 열로 변환(PIVOT)하거나,

열 데이터를 행으로 변환(UNPIVOT) 해야 하는 경우가 종종 발생합니다.

 

SQL에서는 이러한 작업을 PIVOTUNPIVOT 함수로 간단히 처리할 수 있습니다.

 

이번 글에서는 PIVOTUNPIVOT 함수의 기본 개념과 사용법을 Oracle, SQL Server, MySQL 환경에서 예제와 함께 살펴보겠습니다.

 


1. PIVOT: 행 데이터를 열로 변환

PIVOT은 테이블의 행 데이터를 열로 변환하여 데이터를 더 이해하기 쉽게 만들거나,
요약된 형태로 보고할 때 사용됩니다.

예를 들어,
특정 제품의 월별 매출 데이터를 각 월이 열(Column)로 변환된 결과로 나타낼 수 있습니다.

 



 


 

1-1. 예제 데이터

 

아래는 Sales라는 테이블의 데이터입니다.

 

Product Month Sales
Laptop January 200
Laptop February 250
Laptop March 300
Mobile January 150
Mobile February 180
Mobile March 210

 


 

 

1-2. Oracle에서 PIVOT 사용

 

Oracle에서는 PIVOT 키워드를 사용하여 데이터를 열로 변환합니다.

 

 

SELECT *
FROM (
    SELECT Product, Month, Sales
    FROM Sales
) 
PIVOT (
    SUM(Sales) FOR Month IN ('January' AS January,
    'February' AS February, 
    'March' AS March)
)
ORDER BY Product;

 

 

출력 결과

 

Product January February March
Laptop 200 250 300
Mobile 150 180 210

 


 

 

1-3. SQL Server에서 PIVOT 사용

 

SQL Server에서도 PIVOT 키워드를 사용해 동일한 결과를 얻을 수 있습니다.

 

 

SELECT Product, [January], [February], [March]
FROM Sales
PIVOT (
    SUM(Sales) FOR Month IN ([January], [February], [March])
) AS PivotTable;

 

 

출력 결과
Product January February March
Laptop 200 250 300
Mobile 150 180 210

 

 

 


 

1-4. MySQL에서 PIVOT 구현

 

MySQL에서는 PIVOT 키워드를 지원하지 않으므로, CASE문GROUP BY를 사용해 PIVOT을 구현해야 합니다.

 

 

 

SELECT 
    Product,
    SUM(CASE WHEN Month = 'January' THEN Sales ELSE 0 END) AS January,
    SUM(CASE WHEN Month = 'February' THEN Sales ELSE 0 END) AS February,
    SUM(CASE WHEN Month = 'March' THEN Sales ELSE 0 END) AS March
FROM Sales
GROUP BY Product;

 

 

출력 결과

 

 

Product January February March
Laptop 200 250 300
Mobile 150 180 210

 

 


2. UNPIVOT: 열 데이터를 행으로 변환

UNPIVOT은 테이블의 열 데이터를 행으로 변환하는 데 사용됩니다.

예를 들어,
월별 매출 데이터가 열로 나열된 테이블을 다시 월별로 행(Row) 형태로 변환할 수 있습니다.

 

 


 

2-1. 예제 데이터

 

아래는 PIVOT 결과로 나온 데이터를 UNPIVOT으로 변환할 원본 테이블입니다.

 

Product January February March
Laptop 200 250 300
Mobile 150 180 210

 

 


 

 

2-2. Oracle에서 UNPIVOT 사용

 

Oracle에서는 UNPIVOT 키워드를 사용하여 열 데이터를 행으로 변환합니다.

 

 

SELECT Product, Month, Sales
FROM (
    SELECT Product, January, February, March
    FROM SalesPivot
) 
UNPIVOT (
    Sales FOR Month IN (January AS 'January', February AS 'February', March AS 'March')
)
ORDER BY Product, Month;

 

 

출력 결과

 

Product Month Sales
Laptop January 200
Laptop February 250
Laptop March 300
Mobile January 150
Mobile February 180
Mobile March 210

 

 


 

2-3. SQL Server에서 UNPIVOT 사용

 

SQL Server에서도 UNPIVOT 키워드를 사용해 동일한 결과를 얻을 수 있습니다.

 

SELECT Product, Month, Sales
FROM SalesPivot
UNPIVOT (
    Sales FOR Month IN ([January], [February], [March])
) AS UnpivotTable
ORDER BY Product, Month;

 

 

출력 결과

 

Product Month Sales
Laptop January 200
Laptop February 250
Laptop March 300
Mobile January 150
Mobile February 180
Mobile March 210

 


 

2-4. MySQL에서 UNPIVOT 구현

 

MySQL에서는 UNPIVOT을 지원하지 않으므로, UNION ALL을 사용하여 동일한 결과를 얻을 수 있습니다.

 

 

SELECT Product, 'January' AS Month, January AS Sales FROM SalesPivot
UNION ALL
SELECT Product, 'February' AS Month, February AS Sales FROM SalesPivot
UNION ALL
SELECT Product, 'March' AS Month, March AS Sales FROM SalesPivot
ORDER BY Product, Month;

 

 

출력 결과

 

Product Month Sales
Laptop January 200
Laptop February 250
Laptop March 300
Mobile January 150
Mobile February 180
Mobile March 210

 

 


3. PIVOT과 UNPIVOT의 활용 사례

 

3-1. PIVOT 활용 사례

  • 월별 매출 데이터 요약: 제품별, 지역별, 월별로 매출 데이터를 열 형태로 요약.

  • 성적 관리: 학생별 과목 점수를 과목명을 열로 표시.

3-2. UNPIVOT 활용 사례

  • 데이터 정규화: 열 데이터를 행으로 변환하여 데이터를 정규화.

  • 데이터 분석 준비: 여러 열 데이터를 하나의 열로 병합해 분석에 적합한 형태로 변환.

 

 


4. 오라클, SQL Server, MySQL에서의 차이점

 

  1. PIVOT/UNPIVOT 지원 여부
    • Oracle과 SQL Server는 PIVOT/UNPIVOT을 기본적으로 지원.

    • MySQL은 PIVOT/UNPIVOT 키워드를 지원하지 않으므로 CASE문, UNION ALL 등으로 구현.


  2. 문법 차이
    • Oracle: DUAL 테이블 및 PIVOT 구문에서 AS를 사용하지 않음.

    • SQL Server: PIVOT/UNPIVOT에서 AS 키워드로 별칭 필요.

    • MySQL: PIVOT/UNPIVOT 자체 지원 없음.

 


5. 결론

PIVOT은 행 데이터를 열로 변환하여 요약된 보고서를 만들거나 데이터를 시각적으로 이해하기 좋게 만듭니다.


UNPIVOT은 열 데이터를 행으로 변환하여 정규화된 데이터 형태로 바꿀 때 유용합니다.


SQLD 자격증을 준비하거나 실무에서 SQL을 사용할 때,

오라클, SQL Server, MySQL 환경에서 각각의 구현 방식을 익히고

활용법을 숙지하면 데이터 분석과 보고서 작성에 큰 도움이 됩니다.

반응형