Finn.ian
article thumbnail
반응형

PostgreSQL에서 Pivot과 Unpivot은 데이터를 행(row) 또는 열(column) 기준으로 변환하는 작업을 의미한다.

이 작업은 주로 데이터 분석과 시각화를 준비하는 단계에서 사용되며, Pivot과 Unpivot을 활용하는 일이 종종 있어 작성하고자 한다.

이를 작성하는 이유는 PostgreSQL은 Unpivot을 지원하는 전용 함수가 없기 때문이다.

 

1. 1. Pivot

행 데이터를 열 데이터로 변환

 

예제 - 각 제품별 매출을 월별로 정리하기

아래 테이블이 sales라는 테이블이며, 데이터는 아래와 같이 되어 있다고 가정해보자.

month product price
January A 100000
January B 150000
February A 120000
February B 140000

 

이 데이터를 Pivot하면 아래과 같은 SQL을 사용하면 된다.

<sql />
SELECT month , MAX(CASE WHEN product = 'A' THEN price ELSE 0 END) AS A , MAX(CASE WHEN product = 'B' THEN price ELSE 0 END) AS B FROM sales GROUP BY month ORDER BY month ASC ;

 

결과

month A B
January 100000 150000
February 120000 140000

 


2. 02. Unpivot

열 데이터를 행 데이터로 변환

 

예제

위에서 Pivot 결과 데이터를 다시 원래 형태로 변환한다면 아래와 같이 작업하면 된다.

 

Pivot 데이터

month A B
January 100000 150000
February 120000 140000

 

이를 Unpivot 하려면 다음과 같은 SQL을 활용하기 (UNNEST(ARRAY))

<sql />
SELECT month , UNNEST(ARRAY['A', 'B']) AS product , UNNEST(ARRAY[A, B]) AS price FROM ( SELECT month , A , B FROM sales_pivot ) AS pivoted_data ;

3. 결과

month product price
January A 100000
January B 150000
February A 120000
February B 140000

4. 정리

  1. Pivot: CASE 또는 FILTER를 사용하여 행 데이터를 열로 변환
  2. Unpivot: UNNEST 또는 UNION ALL을 사용하여 열 데이터를 행으로 변환
반응형
profile

Finn.ian

@Finn_

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!