본문 바로가기

Oracle/SQL Query

[Oracle] window function (analytic)

(주관적인 입장에서) 잘 안쓰는 함수 정리
테스트 환경 oracle 11gr2 - scott/tiger
참조: sql 전문가 가이드
1. ratio_to_report 함수
해당 컬럼을 컬럼/sum(컬럼)으로 나타냄

SELECT ENAME, SAL, ROUND(RATIO_TO_REPORT(SAL) OVER(), 2) AS R_R
FROM EMP 
WHERE JOB = 'SALESMAN';

2. percent_rank 함수
처음과 끝을 0 과 1로 잡고 위치를 나타냄

SELECT DEPTNO, ENAME, SAL, PERCENT_RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) AS P_R
FROM EMP;

 3. cume_dist 함수 
건수의 누적 백분율이란다. 마지막값은 1이고 첫 값은 0 보다 크겠지.

SELECT DEPTNO, ENAME, SAL, CUME_DIST() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) AS CUME_DIST
FROM EMP;

4. ntile 함수
파티션별 전체 건수를 n 등분한 결과를 구한다.

SELECT ENAME, SAL, NTILE(4) OVER (ORDER BY SAL DESC) AS QUAR_TILE
FROM EMP;