그룹 내 순위 함수
RANK
DENSE_RANK
ROW_NUMBER
그룹 내 집계 함수
SUM
MAX
MIN
AVG
COUNT
그룹 내 행 순서 함수
FIRST_VALUE
LAST_VALUE
LAG
LEAD
그룹 내 비율 함수
CUME_DIST
PERCENT_RANK
NTILE
RATIO_TO_REPORT
통계분석 함수
SELECT WINDOW_FUNCTION (AGRUMENTS) OVER
( [PARTITION BY 컬럼] [ORDER BY 컬럼] [WINDOWING 절])
FROM 테이블명;
# AGRUMENTS(인수) : 함수에 따라 0~N개 인수가 지정될 수 있음
# PARTITION BY 절 : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있음
# ORDER BT 절 : 어떤 항목에 대해 순위를 지정할 지
# WINDOWING 절 : 함수의 대상이 되는 행 기준의 범위를 강력하게 지정
RANK
순위를 구하는 함수
특정 범위(PARTITION) 내에서 순위를 구할 수도 있고 전체 데이터에서 순위 구할 수도 있음
동일 값에 대해서는 동일 순위 부여
SELECT JOB, ENAME, SAL,
RANK() OVER (ORDER BY SAL DESC) ALL_RANK, # 급여 높은 순
RANK)() OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK # JOB 별로 급여 높은 순
FROM EMP;
PARTITION 으로 구분한 JOB_RANK는 같은 업무 범위 내에서만 순위부여
DENSE_RANK
ROW_NUMBER
SUM
# 사원들의 급여와 같은 매니저를 두고 있는 사원들의 급여 합
SELECT MGR, ENAME, SAL,
SUM(SAL) OVER (PARTITION BY MGR) MGR_SUM
FROM EMP;
MAX
MIN
AVG
# 같은 매니저를 두고 있는 사원들의 평균 급여를 구하되 같은 매니저 내에서 자기 바로 앞의 사번과 바로 뒤의 사번인 직원을 대상으로만 출력(앞 사번 + 나 + 뒷사번 / 3 인데, 앞 사번 없으면 나 + 뒷사번 / 2)
SELECT MGR, ENAME, HIREDATE, SAL,
ROUND (AGV(SAL) OVER (PARTITION BY MGR ORDER BY HIREDATE)
ROW BETWEEN 1 PRECEDING AND 1 FOLLOWING) MGR_AVG
FROM EMP;
COUNT
FIRST_VALUE
LAST_VALUE
LAG
# 직원들을 입사일자가 빠른 기준으로 정렬하고 본인보다 입사 일자가 한 명 앞선 사원의 급여를 본인의 급여와 함께 출력
SELECT ENAME, HIREDATE, SAL,
LAG(SAL) OVER (ORDER BY HIREDATE) PREV)SAL
FROM EMP
WHERE JOB = 'SALESMAN';
LEAD
NTILE(4)
→ 4등분