데이터분석 기록일지

SQL

[MySQL] Pivot Table 만들기

야하루 2024. 6. 25. 18:23

 

Pivot table 이란  2개 이상의 기준으로 데이터를 집계할 때, 보기 쉽게 배열하여 보여주는 것을 의미한다.

요런식으로 행,열 모두를 기준으로 한 데이터의 배열

 

 

 

 

만드는 방법
1. 피벗 테이블에 필요한 데이터를 가공하여 만든다.
2. 1의 데이터를 하위 쿼리로 사용하여, Pivot Table 로 만든다.

 

 

 

 

예시) 스파르타 [엑셀보다 쉽고 빠른 SQL] 5주차 숙제
: 음식 타입별, 연령별 주문건수 피벗테이블을 만들자. (연령은 10~59세 사이)

 

 

 

 

1. 필요한 데이터를 만들기 -> 음식타입과 필요한 연령별로 묶어서 개수를 카운트

select cuisine_type,
	case when age between 10 and 19 then "10대"
		when age between 20 and 29 then "20대"
		when age between 30 and 39 then "30대"
		when age between 40 and 49 then "40대"
		when age between 50 and 59 then "50대" end "연령",
		count(1) "count"
from food_orders f inner join customers c on f.customer_id= c.customer_id
where age between 10 and 59
group by 1,2

쿼리 결과

 

 

2. 이를 피벗테이블로 만들자

SELECT cuisine_type,
		max(if(연령='10대',count,0)) "10대",
		max(if(연령='20대',count,0)) "20대",
		max(if(연령='30대',count,0)) "30대",
		max(if(연령='40대',count,0)) "40대",
		max(if(연령='50대',count,0)) "50대"
FROM
(
select cuisine_type,
	case when age between 10 and 19 then "10대"
		when age between 20 and 29 then "20대"
		when age between 30 and 39 then "30대"
		when age between 40 and 49 then "40대"
		when age between 50 and 59 then "50대" end "연령",
		count(1) "count"
from food_orders f inner join customers c on f.customer_id= c.customer_id
where age between 10 and 59
group by 1,2
) a
group by 1

 

1의 데이터를 서브쿼리로 넣어줬다.

연령별로 열의 기준을 설정하고, group by로 행별로 집계하도록 설정하여 피벗 테이블 완성

 

 

+)이때 피벗 테이블을 만들기 위해서는 max()를 일단 사용하라고 배웠는데, 이유는 나중에 알게되면 추가.. 

 

완성된 피벗 테이블