WINDOW FUNCTION
행과 행 간의 관계를 쉽게 정의하기 위해 만든 함수이다.
다른 함수와는 달리 중첩(NEST)해서 사용하지는 못하지만, 서브쿼리에서는 사용할 수 있다.
WINDOW FUNCTION 종류
- 순위 관련 함수: RANK, DENSE_RANK, ROW_NUMBER
- 집계 관련 함수 : SUM, MAX, MIN, AVG, COUNT
- sql server는 OVER 절의 OREDER BY 지원 X
- 행 순서 관련 함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD
- 비율 관련 함수 : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
WINDOW FUNCTION 문법
INDOW 함수에는 OVER 문구가 키워드로 필수 포함된다.
SELECT WINDOW_FUNCTION (ARGUMENTS) OVER
( [PARTITION BY 컬럼] [ORDER BY 컬럼] [WINDOWING 절] )
FROM 테이블명 ;
- WINDOW_FUNCTION : 윈도우 함수
- ARGUMENTS(인수) : 함수에 따라 0 ~ N개 인수가 지정될 수 있다.
- PARTITION BY 절 : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있다.
- ORDER BY 절 : 어떤 항목에 대해 순위를 지정할 지 order by 절을 기술한다.
- WINDOWING 절 : WINDOWING 절은 함수의 대상이 되는 행 기준의 범위를 강력하게 지정할 수 있다. (sql server 에서는 지원하지 않음)
그룹 내 순위 함수
- RANK: 동일 값에 대해서는 동일 순위를 부여하고 중간 순위 비워둠
- DENSE_RANK: 동일 값에 대해서는 동일 순위를 부여하고 중간 순위 비워두지 않음
- ROW_NUMBER: 동일 값에 대해서도 유일한 순위를 부여함
[112번]
Partition과 Group By 구문은 의미적으로 유사하다.
Partition 구문이 없으면 전체 집합을 하나의 Partition으로 정의한다.
윈도우 함수 적용 범위는 Partition을 넘을 수 없다.
[115번]
FROM (SELECT 추천경로, 추천인, 추천점수,
ROW_NUMBER() OVER (PARTITION BY 추천경로
ORDER_BY 추천점수 DESC) AS RNUM
FROM 추천 내역)
WHERE RNUM = 1;
추천경로별로 추천 점수가 가장 높은 데이터를 한건씩 출력하는 SQL이다.
[116번]
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING: 현재 행을 기준으로 파티션내 앞뒤 한건씩을 범위로 지정한다.
그룹 내 행 순서 함수
- LAG 함수 : 파티션별 윈도우에서 이전 몇 번째 행의 값
- LEAD 함수 : 파티션별 윈도우에서 이후 몇 번째 행의 값