dongdorodongdong
윈도우 함수 본문
정의
- 행과 행간의 관계를 쉽게 정의하기 위해 만든 함수
- 결과에 대한 함수처리이기 때문에 결과 건수는 줄지 않음
- 적용 범위는 PARTITION을 넘을 수 없음
종류
- 순위 관련 함수
- RANK
- DENSE_RANK
- ROW_NUMBER - 집계 관련 함수
- SUM
- MAX, MIN
- AVG, COUNT - 행 순서 관련 함수
- FIRST_VALUE, LAST_VALUE (Oracle)
- LAG (Oracle)
- LEAD (Oracle) - 비율 관련 함수
- CUME_DIST (ANSI, Oracle)
- PERCENT_RANK (ANSI, Oracle)
- NTILE (Oracle, SQL Server)
- RATIO_TO_REPORT (Oracle)
구문
-
SELECT 윈도우함수(ARGUMENTS) OVER
(
PARTITION BY 컬럼
ORDER BY ASC / DESC
ROWS / RANGE
BETWEEN UNBOUNDED PRECEDING / n PRECEDING / CURRENT ROW
AND UNBOUNDED FOLLOWING / n FOLLOWING / CURRENT ROW
)
FROM 테이블명
-
SELECT 윈도우함수(ARGUMENTS) OVER
(
PARTITION BY 컬럼
ORDER BY ASC / DESC
ROWS / RANGE
BETWEEN UNBOUNDED PRECEDING / n PRECEDING / CURRENT ROW
AND UNBOUNDED FOLLOWING / n FOLLOWING / CURRENT ROW
)
FROM 테이블명
- ARGUMENTS
- 함수에 따라 0~N개의 인수 - PARTITION BY 절
- 전체 집합을 기준에 따라 소그룹으로 나눌 수 있음
- 의미상 GROUP BY구문과 유사
- PARTITION 구문이 없으면 전체 집합을 하나의 PARTITION으로 정의한 것과 동일 - ORDER BY 절
- 어떤 항목에 대해 순위를 지정할 지 ORDER BY절을 기술 - WINDOWING 절
- 함수의 대상이 되는 행 기준의 범위를 강력하게 지정
- SQL Server는 지원X
- ROWS (물리적인 ROW 단위로 행 집합 지정)
- RANGE (논리적인 상대번지로 행 집합 지정)
- BETWEEN ~ AND (윈도우의 시작과 끝 지정)
- UNBOUNDED PRECEDING (PARTITION의 첫번째 ROW에서 윈도우 시작)
- UNBOUNDED FOLLOWING (PARTITION의 마지막 ROW에서 윈도우 시작)
- CURRENT ROW (윈도우의 시작이나 끝 위치가 현재 ROW)
순위 함수
- RANK 함수
- 특정 컬럼, 특정 범위(PARTITION), 전체 데이터에 대한 순위를 구함
- 동일한 값에 대해서는 동일한 순위를 부여
- 동일한 순위를 각각의 건수로 취급(중간 순위를 비움) - DENCS_RANK 함수
- RANK함수와 흡사
- 동일한 순위를 하나의 건수로 취급하는 것이 다름(중간 순위를 비우지 않음) - ROW_NUMBER 함수
- 동일한 값이라도 고유한 순위를 부여
일반 집계 함수
- SUM, MAX, MIN, AVG, COUNT
그룹 내 행 순서 함수
- FRIST_VALUE 함수
- 범위별 윈도우에서 가장 먼저 나온 값을 구함
- MIN 함수를 활용하여 같은 결과를 얻을 수 있음
- UNBOUNDED PRECEDING : 현재 행을 기준으로 범위 내의 첫 번째 행까지의 범위를 지정
- SQL Server는 지원X - LAST_VALUE 함수
- 범위별 윈도우에서 가장 나중에 나온 값을 구함
- MAX 함수를 활용하여 같은 결과를 얻을 수 있음
- ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING : 현재 행을 포함해서 범위 내의 마지막 행까지의 범위를 지정
- SQL Server는 지원X - LAG 함수
- 범위별 윈도우에서 이전 몇 번째 행의 값을 가져올 수 있음
- SQL Server는 지원X - LEAD 함수
- 범위별 윈도우에서 이후 몇 번째 행의 값을 가져올 수 있음
- SQL Server는 지원X
그룹 내 비율 함수
- RATIO_TO_REPORT 함수
- 범위 내 전체 SUM(컬럼)값에 대한 행별 컬럼 값의 백분율을 소수점으로 구함
- 0 < 결과값 <=1
- 개별 RATIO의 합 = 1 - PERSENT_RANK 함수
- 범위 내 윈도우에서 제일 먼저 나오는 것을 0으로 제일 늦게 나오는 것을 1로하여, 값이 아닌 행의 순서별로 백분율을 구함
- 0 < 결과값 <=1
- SQL Server는 지원X - CUME_DIST 함수
- 범위 내 윈도우의 전체건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율
- 0 < 결과값 <=1
- SQL Server는 지원X - NTITLE 함수
- 범위별 전체 건수를 ARGUMENT 값으로 N 등분한 결과