[SQL] 044. 데이터 분석 함수로 순위의 비율 출력하기

Updated:

초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.

오라클 SQL을 기반으로 합니다.

실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.


[예시]

CUME_DIST() OVER로 데이터의 누적 비율을 출력 가능하다.

정확하게는 데이터의 순위를 매겨 각 순위의 누적 비율을 계산한다.

-- CUME_DIST() OVER (): 누적 비율로서 각 순위가 차지하는 누적비율 개념
SELECT ENAME, SAL, 
RANK() OVER (ORDER BY SAL DESC) AS RANK,
DENSE_RANK() OVER (ORDER BY SAL DESC) AS RANK2,
ROUND(CUME_DIST() OVER (ORDER BY SAL DESC), 3) AS 누적비율
FROM EMP;

[결과]

결과를 보면 SAL(월급)의 각 순위별 누적 비율이 출력되었음을 확인 가능하다.

ENAME SAL RANK RANK2 누적비율
KING 5000 1 1 0.071
SCOTT 3000 2 2 0.214
FORD 3000 2 2 0.214
JONES 2975 4 3 0.286
BLAKE 2850 5 4 0.357
CLARK 2450 6 5 0.429
ALLEN 1600 7 6 0.5
TURNER 1500 8 7 0.571
MILLER 1300 9 8 0.643
WARD 1250 10 9 0.786
MARTIN 1250 10 9 0.786
ADAMS 1100 12 10 0.857
JAMES 950 13 11 0.929
SMITH 800 14 12 1

[예시2]

CUME_DIST() OVER 역시 PARTITION BY로 그룹별로 누적 비율을 구할 수 있다.

-- 직업별 순위 비율
SELECT ENAME, JOB, SAL, 
RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) AS RANK,
ROUND(CUME_DIST() OVER (PARTITION BY JOB ORDER BY SAL DESC), 3) AS 누적비율
FROM EMP;

[결과2]

ENAME JOB SAL RANK 누적비율
SCOTT ANALYST 3000 1 1
FORD ANALYST 3000 1 1
MILLER CLERK 1300 1 0.25
ADAMS CLERK 1100 2 0.5
JAMES CLERK 950 3 0.75
SMITH CLERK 800 4 1
JONES MANAGER 2975 1 0.333
BLAKE MANAGER 2850 2 0.667
CLARK MANAGER 2450 3 1
KING PRESIDENT 5000 1 1
ALLEN SALESMAN 1600 1 0.25
TURNER SALESMAN 1500 2 0.5
MARTIN SALESMAN 1250 3 1
WARD SALESMAN 1250 3 1

Tags:

Categories:

Updated:

Leave a comment