[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 |
Leave a comment