Sql

윈도우함수 ≒ 분석함수 ≒ 순위함수

pakker 2021. 3. 29. 16:44

1. 순위 관련 함수 : RANK, DENSE_RANK, ROW_NUMBER

2. 그룹내 집계 관련 함수 : SUM, MAX, MIN, AVG, COUNT

3. 행 순서 관련 함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD 

4. 그룹내 비율 관련 함수 : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT

5. 선형분석을 포함한 통계 분석관련 함수 : ...(생략)......... 통계에 특화된 내용임

 

1. 순위

 : 순위를 매겨줌. 

rank 순위를매겨줌. 
차이점 : 1등이 두명이면 그다음은 3위로 표시
dense_rank 순위를매겨줌
차이점 : 1등이 두명이여도 그다음은 2위로 표시
ROW_NUMBER 순위를매겨줌
차이점 : 1등이 두명이여도 rowid가 적은행부터 1등을 매겨줌. 같은 값이라도 1,2로 따로 나옴

 

2. 집계 (보통 잘 알고있으니까 패스)

3. 그룹내 행 순서함수

FIRST_VALUE min이랑 비슷
 LAST_VALUE, max랑 비슷
LAG 이전 몇번째 행의 값을 가져올 수 있다.
ex.
select ENAME, HIREDATE, SAL
        LAG(SAL,2,0) over (order by HIREDATE) as PREV_SAL
from EMP
where JOB='SALESMAN'

sal의 두행 앞의 SALARY를 가져오고 값이 없는 경우에는 0을 default로 넣어준다
 LEAD  이후 몇번째 행의 값을 가져올 수 있다.
ex.
LEAD(HIREDATE,1,0)
위와 같음

4. 그룹내 비율함수

RATIO_TO_REPORT 파티션 내 전체 sum 값에 대한 행별 칼럼 값의 백분율을 소수점으로 구함
PERCENT_RANK,  파티션 별 윈도우에서 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 하여 값이 아닌 행의 순서별 백분율을 구한다.
NTILE,  파티션별 윈도우의 전체 건수에허 현재 행보다 작거나 같은 건수에 대한 누적백분율
CUME_DIST,  파티션 별 전체 건수를 인자 값으로 n등분한 결과