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"
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
group by 1, 2
) a
group by 1
order by 7 desc
위 query 가 오늘 새로 학습한 Pivot Table 중 하나이다.
가장 안 쪽의 subquery 문을 작성하는 것 까지는 어렵지 않게 진행했다. 그 후 쓰여진 Pivot view 부터는 강의 영상을 멈추고 천천히 작성할 수밖에 없었다.
작성을 완료하고 나서는 자잘한 내용을 바꾸면서 출력값이 어떻게 바뀌는 지 확인했다. 가령 위 query 에서 subquery 문 안 쪽의 group by 에서 2를 제외하면 데이터량이 방대할 경우 출력하고자 하는 데이터와는 다른 것이 나올 위험이 있다는 것을 재확인할 수 있었다.
select date(date) date_type,
date
from payments
위의 query 문에서 date(date) 컬럼과 date 컬럼은 같은 형태로 출력되었지만, 컬럼의 형식이 원래 문자 개념으로 출력되던 것이 시간 개념으로 바뀌어서 출력된 것을 알 수 있었다.