Post

Advanced SQL: Window Functions

Advanced SQL: Window Functions

Description

Window Function은 행을 그룹으로 묶지 않고도, 현재 행을 유지한 채로 집계 계산을 수행할 수 있는 기능이다. 일반적인 집계 함수(GROUP BY)는 여러 행을 하나의 결과 행으로 줄이지만, 윈도우 함수는 각 행마다 집계 결과를 함께 보여준다. 대표적으로 SUM(), AVG(), COUNT(), MIN(), MAX()등을 OVER() 절과 함께 사용한다.

Syntax

윈도우 함수는 OVER() 안에 계산 기준을 적어 사용한다. PARTITION BY는 데이터를 그룹으로 나누고, ORDER BY는 그룹 안에서 계산 순서를 정한다. GROUP BY와 달리 원본 행을 줄이지 않고, 계산 결과를 각 행에 함께 보여준다는 점이 핵심이다.

SELECT column_name,
       AGGREGATE_FUNCTION(column_name) OVER (
           PARTITION BY column_name
           ORDER BY column_name
       )
FROM table_name;

Example

Running Total

주문 날짜 기준으로 누적 매출을 계산한다.

SELECT order_date,
       amount,
       SUM(amount) OVER (ORDER BY order_date) AS running_total
FROM orders;

Partitioned Aggregate

고객별 총 주문 금액을 각 행에 함께 표시한다.

SELECT customer_id,
       order_id,
       amount,
       SUM(amount) OVER (PARTITION BY customer_id) AS customer_total
FROM orders;

Average by Group

부서별 평균 급여를 각 직원 행에 함께 표시한다.

SELECT employee_id,
       department,
       salary,
       AVG(salary) OVER (PARTITION BY department) AS dept_avg_salary
FROM employees;

Reference

This post is licensed under CC BY 4.0 by the author.

Trending Tags