데이터분석 6기/사전캠프

[TIL] 데이터 분석 사전캠프 7일차 - pivot table & window function

seyeon1130 2025. 2. 3. 21:13

COALESCE(age,20) ->age가 null값이면 20으로 대체

 

pivot table

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 함수를 써야한다.

피벗 테이블 생성 시 MAX() 함수를 사용하는 이유는 집계 함수가 반드시 필요하기 때문입니다. SQL에서는 SELECT 절에 서브쿼리의 컬럼을 바로 옆으로 펼치려면 집계 함수가 필요합니다.]

 

window 함수

문법: window_function(argument) over (partition by 그룹 기준 컬럼 order by 정렬 기준)

rank() over (partition by 그룹 기준 컬럼 order by 정렬 기준)

그룹별로 누적합계 구하고 싶을 때 group by 사용하지 않고 sum 사용

sum(합할 컬럼명) over (partition by 그룹 기준)