RATIO_TO_REPORT 함수
- RATIO_TO_REPORT 함수를 이용해 파니션 내 전체 SUM(컬럼) 값에 대한 행별 컬럼 값의 백분율을 소수점으로 구할 수 있다. 결과값은 >0 & <= 1의 범위를 가진다. 그리고 개별 RATIO의 합을 구하면 1이 된다.
- SQL SERVER에서는 지원하지 않음
- EX) JOB이 SALESMAN인 사원들을 대상으로 전체 급여에서 본인이 차지하는 비율을 출력한다.
SELECT ENAME, SAL, ROUND(RATIO_TO_REPORT(SAL) OVER(), 2) RR
FROM EMP
WHERE JOB = 'SALESMAN'
ENAME SAL RR
1 ALLEN 1600.00 0.29
2 WARD 1250.00 0.22
3 MARTIN 1250.00 0.22
4 TURNER 1500.00 0.27
- PERCENT_RANK 함수를 이용해 파티션별 윈도우에서 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 하여 값이 아닌 행의 순서별 백분율을 구한다.
- 결과값은 >0 & <= 1의 범위를 가진다.
- SQL SERVER에서는 지원하지 않음
- ex) 같은 부서 소속 사원들의 집합에서 본인의 급여가 누적 순서상 몇번째 위치쯤에 있는지 0과 1 사이의 값으로 출력한다.
SELECT DEPTNO, ENAME, SAL,
ROUND(CUME_DIST() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC),3) AS CUME_DIST
FROM EMP
DEPTNO ENAME SAL CUME_DIST
1 10 KING 5000.00 0.333
2 10 CLARK 2450.00 0.667
3 10 MILLER 1300.00 1
4 20 SCOTT 3000.00 0.4
5 20 FORD 3000.00 0.4
6 20 JONES 2975.00 0.6
7 20 ADAMS 1100.00 0.8
8 20 SMITH 800.00 1
9 30 BLAKE 2850.00 0.167
10 30 ALLEN 1600.00 0.333
11 30 TURNER 1500.00 0.5
12 30 MARTIN 1250.00 0.833
13 30 WARD 1250.00 0.833
14 30 JAMES 950.00 1
- 위 예제에서 NTILE(4)이 의미는 14명의 팀원을 4개의 조로 나눈다는 의미이다. 전체 14명을 4개의 집합으로 나누면 몫이 4명, 나머지가 2명이 된다. 나머지 두명은 앞의 ㅗ부터 할당된다. 즉, 4명 + 4명 + 3명 + 3명으로 조를 나누게 된다.