window_function(argument) over (partition by 그룹 기준 컬럼 order by 정렬 기준)
- window_function : 기능 명을 사용해준다. (sum, avg 와 같이 기능명이 있습니다)
- argument : 함수에 따라 작성하거나 생략할 수도 있다.
- partition by : 그룹을 나누기 위한 기준입니다. group by 절과 유사하며 해당 컬럼을 기준으로 파티션으로 나눈다고 생각하면 편하다.
- order by : window function 을 적용할 때 정렬 할 컬럼 기준을 적어준다.
예제 1
- Rank 함수 적용하여 음식 타입별로 주문 건수가 가장 많은 상점 3개씩 조회하자
select cuisine_type, restaurant_name, order_count, rn "순위" from ( select cuisine_type, restaurant_name,으로 정렬한다. rank() over (partition by cuisine_type order by order_count desc) rn, order_count # cuisine_type을 기준으로 순위를 매기며 주문수량(order_count)순 으로 정렬한다. ( # rank 함수에 ()를 비워도 된다. from # rank() over는 한 쌍 이라고 생각하자. select cuisine_type, restaurant_name, count(1) order_count from food_orders group by 1, 2 ) a ) b where rn<=3 #주문건수 가장 많은 상점 3개씩 조회 order by 1, 4
예제 2 - 각 음식점의 주문건이 해당 음식 타입에서 차지하는 비율을 구하고, 주문건이 낮은 순으로 정렬했을 때 누적 합을 구하자
select cuisine_type, restaurant_name, order_count, sum(order_count) over (partition by cuisine_type) sum_cuisine_type, # SUM() 함수는 총 매출을 계산 OVER() 절은 Date열을 기준으로 정렬된 행 창을 정의 sum(order_count) over (partition by cuisine_type order by order_count, restaurant_name) cumulative_sum from # over(order by order_count, restaurant_name) 행을 정렬하는 데 사용되는 열 ( select cuisine_type, restaurant_name, count(1) order_count from food_orders group by 1, 2 ) a
이 외에 이 외의 다른 Window Function 을 알고 싶다면 검색해서 사용해보자
SQL 누적합계 참고하기 좋은 링크 첨부
링크텍스트