데이터 분석/강의 노트

SQL 윈도우 함수

hyunseo 2024. 8. 16. 01:25

SQL 윈도우 함수는 데이터 분석과 집계 작업을 훨씬 더 강력하고 유연하게 수행할 수 있는 도구입니다. 이번 포스팅에서는 데이터 분석, 트렌드 분석, 순위 매기기 등에서 활용되는 윈도우 함수에 대해 알아보겠습니다.

윈도우 함수 기본 구조

윈도우 함수의 기본 구조는 다음과 같습니다.

<윈도우 함수>(<컬럼>) OVER (
    PARTITION BY <컬럼>
    ORDER BY <컬럼>
)

주요 윈도우 함수 : 순위 매기기

순위를 매길 때는 RANK(), DENSE_RANK(), ROW_NUMBER() 함수를 사용할 수 있습니다.

  • RANK()의 경우, 동률이 발생할 경우 동률로 표시하고, 그 개수만큼 다음 순위에 갭이 발생합니다.
  • DENSE_RANK()의 경우 동률이 발생할 경우 동률로 표시하고 다음 순위에 갭이 없습니다.
  • ROW_NUMBER()의 경우 동률이 발생해도 무시하고 순위를 부여합니다.
SELECT name, salary,
       RANK() OVER (ORDER BY salary DESC) AS rank,
       DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank,
       ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;
name salary rank dense_rank row_num
Alice 7000 1 1 1
Charlie 7000 1 1 2
David 6000 3 2 3
Bob 5000 4 3 4
Eve 4000 5 4 5

주요 윈도우 함수 : 집계하기

집계함수인 COUNT(), SUM(), AVG() 등의 함수도 윈도우 함수로 사용할 수 있습니다.

SELECT name, salary,
       SUM(salary) OVER (PARTITION BY department_id) AS department_total,
       AVG(salary) OVER (PARTITION BY department_id) AS department_avg
FROM employees;
name salary department_total department_avg
Alice 7000 12000 6000
Bob 5000 12000 6000
Charlie 6000 11500 5750
David 5500 11500 5750
Eve 4000 8500 4250
Frank 4500 8500 4250

PARTITION BY

PARTITION BY는 데이터 집합을 나누는 기준입니다. 위의 쿼리문을 예로 들어보면, PARTITION BY department_id 라고 되어 있기 때문에, 각 department_id 별로 급여의 합계와 평균을 반환합니다. 의 표를 보면, Alice와 Bob이 같은 부서이기 때문에 합계는 12000(7000+5000)이고 평균은 6000인 것을 알 수 있습니다.