[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