728x90
Pivot tavle (피벗테이블)이란: 2개 이상의 기준을 가지고 있는 데이터를 보다 쉽게 배열하여 보여주는 형식
[실습1] 음식점별 시간별 주문건수 Pivot Table 뷰 만들기 (15~20시 사이, 20시 주문건수 기준 내림차순)
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
*MAX를 이용하는 이유는 if를 통한 해당 값이 NULL일 경우를 제거하는 역할
[실습2] 성별, 연령별 주문건수 Pivot Table 뷰 만들기 (나이는 10~59세 사이, 연령 순으로 내림차순)
SELECT age,
MAX( if(gender = 'male',cnt_order,0)) "male", -- 행을 MAX로 지정
MAX( if(gender= 'female', cnt_order,0)) "female"
FROM
(
SELECT gender,
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 age,
COUNT(1) cnt_order -- 주문건수
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
ORDER BY 1 DESC
728x90
'내일배움캠프 > SQL' 카테고리의 다른 글
[SQL]날짜 포맷과 조건 (포맷 함수) (2) | 2024.11.18 |
---|---|
[SQL]Window Function_RANK, SUM (0) | 2024.11.18 |
[SQL]데이터에서 예상하지 못한 값이 나왔을 때 (이상한 값, 값이 없음 등) (0) | 2024.11.18 |
[SQL] 다른 테이블 합치기 JOIN (1) | 2024.11.15 |
[SQL]Subquery로 여러 번의 연산을 한 번에 (2) | 2024.11.15 |