WINDOW FUNCTION은 SQL에서 사용되는 특별한 종류의 함수입니다.
이 함수는 쿼리 결과 집합 내에서 특정 창(window)에 대해 계산을 수행하며, 일반적으로 그룹화나 집계와 관련된 작업에서 사용됩니다.
간단한 예제를 통해 설명해보겠습니다.
아래의 예시는 sales 테이블에서 각 제품의 판매액에 대한 누적 합계를 계산하는 쿼리입니다.
SELECT
product,
sale_date,
amount,
SUM(amount) OVER (PARTITION BY product ORDER BY sale_date) as cumulative_sales
FROM sales;
여기서 SUM(amount) OVER (PARTITION BY product ORDER BY sale_date) 부분이 WINDOW FUNCTION입니다.
이 함수는 다음과 같이 구성되어 있습니다.
SUM(amount): 누적 합계를 계산할 대상 열.
OVER: 윈도우 함수를 시작하는 키워드.
(PARTITION BY product ORDER BY sale_date): 윈도우를 어떻게 정의할 것인지를 나타냅니다.
이 경우 product로 그룹화하고, sale_date에 따라 정렬합니다.
위의 쿼리는 결과 집합의 각 행에 대해 product로 그룹화한 후, sale_date에 따라 정렬합니다.
그런 다음 해당 제품 내에서 각 판매일자의 누적 합계를 계산합니다.
예를 들어, 아래와 같은 sales 데이터가 있다고 가정해봅시다:
| product | sale_date | amount |
|---------|------------|--------|
| A | 2023-10-01 | 100 |
| A | 2023-10-02 | 200 |
| B | 2023-10-01 | 150 |
| B | 2023-10-03 | 300 |
쿼리의 결과는 다음과 같습니다:
| product | sale_date | amount | cumulative_sales |
|---------|------------|--------|-----------------|
| A | 2023-10-01 | 100 | 100 |
| A | 2023-10-02 | 200 | 300 |
| B | 2023-10-01 | 150 | 150 |
| B | 2023-10-03 | 300 | 450 |
위의 결과에서 cumulative_sales 열은 각 행에서 해당 제품의 판매액의 누적 합계를 나타냅니다.
WINDOW FUNCTION은 데이터를 세분화하고 계산을 보다 정교하게 수행할 때 유용합니다.
예를 들어, 랭킹, 누적 합계, 이동 평균 등을 계산할 때 자주 활용됩니다.