3가지의 포인트를 기억하자.
1. 주로 SELECT절에서 사용됨
2. 윈도우함수는 OVER()와 함께 붙어다님
3. 어떤 컬럼을 기준으로 행간 관계를 볼 것인지 정해줘야 할 때 : OVER()안에 PARTITION BY, ORDER BY [컬럼] 입력
# VER.1
SELECT [WINDOW_FUNCTION]() OVER(PARTITION BY [컬럼])
FROM [TABLE]
# VER.2
SELECT [WINDOW_FUNCTION]() OVER(ORDER BY [컬럼])
FROM [TABLE]
# VER.3
SELECT [WINDOW_FUNCTION]() OVER(PARTITION BY [컬럼] ORDER BY [컬럼]) [ALIAS]
FROM [TABLE]
구분 | 함수 |
---|---|
순위 함수 | RANK, DENSE_RANK, ROW_NUMBER |
일반 집계함수 | SUM, MAX, MIN, AVG, COUNT |
그룹 내 행 순서 함수 | FIRST_VALUE, LAST_VALUE, LAG, LEAD |
그룹 내 비율 함수 | RATIO_TO_REPROT, PERCENT_RANK, CUME_DIST, NTITLE |
앞서 언급한 윈도우함수 중에는 SUM,MAX 등 익숙한 일반 집계함수도 있다.
GROUP BY한 뒤에 SUM() 사용해주면 되는데 굳이 일반 집계함수를 윈도우함수로도 활용하는 이유가 무엇일까?
생각해보자!
우리에게 친숙한 GROUP BY로 묶어주고 COUNT()를 사용하면
1. 행의 수가 줄어든다. -> 테이블의 구조가 변경됨.
2. SELECT할 수 있는 컬럼이 수치형 컬럼의 집계로 한정된다.
결국 윈도우함수는 집약 기능은 없고 연산 기능만 있는 GROUP BY와 같은 의미라고 이해할 수 있다.