SQL 5주차 - 윈도우 함수(RANK, SUM)

노승현·2024년 7월 15일

내일배움 사전캠프

목록 보기
26/38

윈도우 함수

SQL 중에는 윈도우 함수라는 것이 존재한다.
윈도우 함수에는 RANK(), SUM(), AVG() 등이 존재한다.

위의 세 개 예시를 보면 윈도우 함수와 집계 함수와 같은 것이라 생각할 수 있다.
하지만 조금 다른 것이 윈도우 함수의 경우 SQL에서 데이터 집합 내에서 행들에 대한 계산을 수행하는 함수로
전통 집계 함수(SUM, AVG, COUNT)는 데이터 집합 전체에 대한 결과 반환하지만, 윈도우 함수는 데이터를 더 세부적으로 다루며 각 행에 대한 계산 결과를 생성한다.
데이터 전체에 대한 결과 반환이냐, 각 행에서 계산 한 뒤에 계산 결과를 반환하느냐에 따라 다른 것 같이 보인다.

윈도우 함수의 기본적인 구조는

Window-function() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)

Partition by는 데이터를 논리적으로 파티셔닝해서 각 파티션 내에서 순위를 매긴다. 이 절이 생략되면 전체 결과 세트가 단일 파티션으로 간주된다.
ORDER BY는 순위를 매길 기준 열을 지정하는 것으로, 순위는 이 열의 값에 따라 결정된다.


RANK()함수

SQL에서 RANK()함수는 순위 계산하는 데 사용
동일 값을 가진 행에 동일 순위 부여하고, 동일 순위 가진 행의 다음 순위는 누락된 순위만큼 증가한다.

RANK() 함수의 예시

select cuisine_type,
restaurant_name,
rank() over (partition by cuisine_type order by order_count desc) rn,
order_count
from
(
select cuisine_type, restaurant_name, count(1) order_count
from food_orders
group by 1, 2
) a
cuisine_type열을 파티션으로 분리하고, order_count를 기준으로 순위를 정한다.
american 다음 chinese 순서로 파티션을 분리하고 그 안에서 순위를 정한다.


SUM함수

SUM 함수는 앞서 배운 합계를 구하는 기능과 동일하다
하지만 누적합이 필요하거나 카테고리별 합계컬럼과 원본 컬럼을 함께 이용할 때 유용하게 사용할 수 있다.
윈도우 함수에서 SUM은 특정 윈도우(파티션) 내에서 값의 합을 계산하는 것이다.

SUM() 함수의 예시

select cuisine_type,
restaurant_name,
order_count,
sum(order_count) over (partition by cuisine_type) sum_cuisine_type,
sum(order_count) over (partition by cuisine_type order by order_count, restaurant_name) cumulative_sum
from
(
select cuisine_type, restaurant_name, count(1) order_count
from food_orders
group by 1, 2
) a
cuisine_type열을 파티션으로 분리하고, order_count와 음식점 이름을 기준으로 주문건수를 정한다.

0개의 댓글