16. SQL ( Pivot Table )

김요한·2024년 6월 26일

Pivot table 이란?

  • 2개 이상의 기준으로 데이터를 집계할 때, 보기 쉽게 배열하여 보여주는 것
  • 데이터를 뽑아서 엑셀로 가공하지 않고, 바로 Pivot table 을 만들 수 있다.
  • 예시 -음식점별 시간별 주문건수 Pivot Table 뷰 만들기 (15~20시 사이, 20시 주문건수 기준 내림차순)
    1. 첫 번째로 음식점별, 시간별 주문건수 집계한다.
select a.restaurant_name,
       substring(b.time, 1, 2) hh,
       count(1) cnt_order #주문 건수 조회
from food_orders a inner join payments b on a.order_id=b.order_id
where substring(b.time, 1, 2) between 15 and 20 #substr함수로 시간만 조회한다.
group by 1, 2

2. Pivot view 구조 만들기

  • Pivot 기본 구조
 max(if(조건 , True, False)) AS "",
 /*Pivot 구조를 활용할 때 max를 써준다 지금은 자세하게 알기엔 
 너무 깊숙한 내용이 될 수 있어 max에 if를 써준다! 정도만 알고있자*/
select restaurant_name,
       max(if(hh='15', cnt_order, 0)) "15",
       max(if(hh='16', cnt_order, 0)) "16",
       max(if(hh='17', cnt_order, 0)) "17",
       max(if(hh='18', cnt_order, 0)) "18",
       max(if(hh='19', cnt_order, 0)) "19",
       max(if(hh='20', cnt_order, 0)) "20"  #max함수를 써서 15~20까지 피벗 구조를 만들었다.
from 
(
select a.restaurant_name,
       substring(b.time, 1, 2) hh, #시간만 조회하기
       count(1) cnt_order # 주문 건수 조회
from food_orders a inner join payments b on a.order_id=b.order_id
where substring(b.time, 1, 2) between 15 and 20 #15분에서 20분사이 조건을 만듬
group by 1, 2       # 음식점 이름과 시간을 카테고리로 묶는다.
) a
group by 1
order by 7 desc #20 주문건 수 기준 내림차순 하였다.

0개의 댓글