하파와 데이터

SQL - PIVOT 변환하기 본문

Development/SQL

SQL - PIVOT 변환하기

hhpp 2023. 7. 31. 23:11

데이터를 분석하거나, 내용을 파악함에 있어서

기본적인 테이블의 구조가 불편한 경우가 있다. 

 

세로의 형태로 놓았을때, 데이터를 더 분명하게 파악할 수 있거나, 

나의 원하는 세부 항목으로 행을 만들었을때, 데이터 분석이 용이한 경우가 있다. 

이럴때 우리는 PIVOT을 한다. 

 

PIVOT을 하는 다양한 방법이 있고, PIVOT 함수가 있는 것도 같은데 

데이터리안 강의에서 배운 피봇의 방법은 조금 다르다. 그 방법을 설명하고자 한다. 

 

데이터의 내용이 아래와 같을때, 

아래의 SQL구문을 사용하면, 

SELECT CATEGORYID, PRICE
FROM PRODUCTS
GROUP BY CATEGORYID

 

아래와 같이 정보를 확인할 수 있다. 

이런 형식이 아니라, 행에 각 카테고리 ID가 나오고, 금액을 확인할 수는 없을까? 

이때 피봇을 진행한다. 

 

SELECT 
	CASE WHEN CATEGORYID = 1 THEN PRICE ELSE NULL END AS CATEGORY1_PRICE
     ,  CASE WHEN CATEGORYID = 2 THEN PRICE ELSE NULL END AS CATEGORY2_PRICE
     ,  CASE WHEN CATEGORYID = 3 THEN PRICE ELSE NULL END AS CATEGORY3_PRICE
FROM PRODUCTS

-- 상기 구문에서는 번거로움을 제거하고자 CATEGORYID를 3까지만 코드 내용에 작성하였음

 

상기의 내용은, CASE문을 사용하여 CATEGORYID 가 1일 경우에 PRICE를 넣고, 이외의 값에는 NULL값을 넣고

동일하게 하단 줄에서는 CATEGORYID=2일 경우에, PRICE를 넣고, 이외에는 NULL

마지막 CATEGORYID=3일경우, PRICE를 넣고, 이외에는 NULL을 넣는다.

 

즉, 상기 처럼, 첫번째 CATEGORY1_PRICE열에서는 CATEGORY=1인 경우에는 PRICE를 넣고, 나머지는 모두 NULL로 처리해버린다. 즉 하나의 조건에 만족하는 값들만 확인할 수 있게 된 것이다. 

 

여기서의 장점은, 집계함수를 활용할때 더 극적으로 보인다. 지금은 단순 값의 나열이지만

SUM / AVG 등의 집계함수를 사용하면, 카테고리별 합계, 평균 등의 값을 바로 확인할 수 있다. 

 

위와같이 각 카테고리별 평균값을 확인할 수 있는 결과값을 확인할 수 있다. 

'Development > SQL' 카테고리의 다른 글

[SQL이론] DATE 형태 변형, 일자 변경  (0) 2023.08.08
[SQL 이론] 숫자형, 문자형 기본함수  (0) 2023.08.07
SQL 소수점 처리  (0) 2023.07.22
SQL- Null 에 따른 AVG 값의 차이  (0) 2023.07.22