윈도우 함수중급
윈도우 함수 (분석 함수)
행을 그룹화하지 않고도 그룹 단위 연산을 수행할 수 있는 고급 SQL 함수
정의
OVER 절을 통해 윈도우(행의 집합)를 정의하고, 그 윈도우 안에서 집계나 순위 연산을 수행한다. GROUP BY가 행을 합쳐 결과를 줄이는 것과 달리 윈도우 함수는 원본 행을 유지하면서 추가 컬럼을 만든다. PARTITION BY로 윈도우를 나누고, ORDER BY로 윈도우 안의 순서를 정한다.
왜 중요한가?
GROUP BY는 행을 합치지만, 윈도우 함수는 원본 행을 유지하면서 순위, 누적합, 이전/다음 값 비교 등이 가능하다. 시계열 분석, 그룹 내 순위 추출에 필수.
틀리기 쉬운 포인트
- !PARTITION BY를 빠뜨려 전체 데이터에 대해 연산이 적용됨
- !ROW_NUMBER, RANK, DENSE_RANK의 차이를 혼동
- !WHERE 절에서 윈도우 함수를 직접 사용하려고 시도 (서브쿼리로 감싸야 함)
예시
SELECT name, salary, RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) AS rnk FROM employees;
성능 포인트
!PARTITION BY/ORDER BY 컬럼이 인덱스의 선두와 일치하면 정렬 비용이 줄어든다(WINDOW NOSORT).