본문 바로가기

IT/SQL

RATIO_TO_REPORT 함수

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 함수

 - PERCENT_RANK 함수를 이용해 파티션별 윈도우에서 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 하여 값이 아닌 행의 순서별 백분율을 구한다.

 - 결과값은 >0 & <= 1의 범위를 가진다.

 - SQL SERVER에서는 지원하지 않음

- EX) 같은 부서 소속 사원들의 집합에서 본인의 급여가 순서상 몇번째 위치쯤에 있는지 0과 1사이의 값으로 출력한다.
SELECT DEPTNO, ENAME, SAL,
 PERCENT_RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) AS PR
 FROM EMP

    DEPTNO ENAME SAL PR
1 10 KING 5000.00 0
2 10 CLARK 2450.00 0.5
3 10 MILLER 1300.00 1
4 20 SCOTT 3000.00 0
5 20 FORD 3000.00 0
6 20 JONES 2975.00 0.5
7 20 ADAMS 1100.00 0.75
8 20 SMITH 800.00 1
9 30 BLAKE 2850.00 0
10 30 ALLEN 1600.00 0.2
11 30 TURNER 1500.00 0.4
12 30 MARTIN 1250.00 0.6
13 30 WARD 1250.00 0.6
14 30 JAMES 950.00 1


CUST_DIST 함수
 - CUST_DIST 함수를 이용해 파티션별 윈도우의 전체건수에서 현재 행보다 작거나 같은 건수에 대한 누적백분율을 구한다. 

 - 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


 - DEPTNO가 10인 경우 윈도우 전체가 3건이므로 0.333단위의 간격을 가진다.


NTILE 함수
 - NTILE 함수를 이용해 파티션별 전체 건수를 ARGUMENT 값으로 N 등분한 결과를 구할 수 있다.
 - EX) 전체 사원을 급여가 놓은 순서로 정렬하고, 급여 기준으로 4개의 그룹으로 분류한다.
 SELECT ENAME, SAL, NTILE(4) OVER(ORDER BY SAL DESC) AS QUAR_TILE
FROM EMP

    ENAME SAL QUAR_TILE
1 KING 5000.00 1
2 FORD 3000.00 1
3 SCOTT 3000.00 1
4 JONES 2975.00 1
5 BLAKE 2850.00 2
6 CLARK 2450.00 2
7 ALLEN 1600.00 2
8 TURNER 1500.00 2
9 MILLER 1300.00 3
10 WARD 1250.00 3
11 MARTIN 1250.00 3
12 ADAMS 1100.00 4
13 JAMES 950.00 4
14 SMITH 800.00 4

- 위 예제에서 NTILE(4)이 의미는 14명의 팀원을 4개의 조로 나눈다는 의미이다. 전체 14명을 4개의 집합으로 나누면 몫이 4명, 나머지가 2명이 된다. 나머지 두명은 앞의 ㅗ부터 할당된다. 즉, 4명 + 4명 + 3명 + 3명으로 조를 나누게 된다.