MySQL에서 윈도우 함수(Window Function)는 집계 함수와 비슷하지만, 결과를 그룹화하지 않고도 개별 행에 대한 연산을 수행하는 함수입니다. 즉, 윈도우 함수는 행을 그룹화하지 않고, 데이터의 특정 범위(윈도우)를 지정하여 그 범위 내에서 연산을 수행할 수 있습니다.
윈도우 함수는 행을 그룹화한 후에도 각 행을 그대로 유지하면서 집계 값이나 순위를 계산하는 데 유용하며, 분석 쿼리나 데이터 보고서 작성 시 강력한 도구로 사용됩니다.
윈도우_함수(컬럼) OVER (
[PARTITION BY 컬럼] -- 그룹을 나누는 기준 (선택 사항)
[ORDER BY 컬럼] -- 정렬 기준 (선택 사항)
[ROWS | RANGE BETWEEN] -- 윈도우 범위 (선택 사항)
)
예시: 주요 윈도우 함수
: 각 행에 대해 순번을 부여하는 함수
SELECT employee_name, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
FROM employees;
결과 예시:
employee_name | salary | rank |
---|---|---|
John | 80000 | 1 |
Mary | 75000 | 2 |
Bob | 70000 | 3 |
: 동일한 값이 있을 때 동일한 순위를 부여하는 함수
SELECT employee_name, salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
결과 예시:
employee_name | salary | rank |
---|---|---|
John | 80000 | 1 |
Mary | 75000 | 2 |
Bob | 75000 | 2 |
Alice | 70000 | 4 |
: 동일한 값이 있을 때 동일한 순위를 부여하지만, 그 뒤의 순위를 건너뛰지 않는 함수
SELECT employee_name, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
결과 예시:
employee_name | salary | rank |
---|---|---|
John | 80000 | 1 |
Mary | 75000 | 2 |
Bob | 75000 | 2 |
Alice | 70000 | 3 |
: 다음 행의 값을 반환하는 함수
SELECT employee_name, salary,
LEAD(salary, 1) OVER (ORDER BY salary) AS next_salary
FROM employees;
결과 예시:
employee_name | salary | next_salary |
---|---|---|
Alice | 70000 | 75000 |
Bob | 75000 | 80000 |
John | 80000 | NULL |
: 이전 행의 값을 반환하는 함수
SELECT employee_name, salary,
LAG(salary, 1) OVER (ORDER BY salary) AS prev_salary
FROM employees;
결과 예시:
employee_name | salary | prev_salary |
---|---|---|
Alice | 70000 | NULL |
Bob | 75000 | 70000 |
John | 80000 | 75000 |
GROUP BY는 데이터 그룹화 후 하나의 결과만 반환하는 반면, 윈도우 함수는 그룹화하지 않고도 각 행별로 집계 값을 계산하여 반환합니다.
윈도우 함수는 그룹화 없이 개별 행을 그대로 유지하면서도 집계 및 분석을 수행할 수 있습니다.