[SQL] 042. 데이터 분석 함수로 순위 출력하기2
Updated:
초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.
오라클 SQL을 기반으로 합니다.
실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.
[예시]
DENSE_RANK() OVER
로 데이터의 순위를 출력 가능하다.
RANK() OVER
와 다른 점은 다음과 같다.
-
RANK() OVER
: 동일 순위 존재시 다음 순위는 COUNT(동일 순위) + 1 -
DENSE_RANK() OVER
: 동일 순위 존재시 다음 순위는 동일 순위 + 1
-- 월급 순위
SELECT ENAME, JOB, SAL,
RANK() OVER (ORDER BY SAL DESC) AS RANK_OVER,
DENSE_RANK() OVER (ORDER BY SAL DESC) AS DENSE_RANK_OVER
FROM EMP
WHERE JOB IN ('ANALYST', 'MANAGER');
[결과]
RANK() OVER
는 공동 1위 다음 3위가 출력된다.
DENSE_RANK() OVER
는 공동1위 다음 2위로 출력된다.
ENAME | JOB | SAL | RANK_OVER | DENSE_RANK_OVER |
---|---|---|---|---|
FORD | ANALYST | 3000 | 1 | 1 |
SCOTT | ANALYST | 3000 | 1 | 1 |
JONES | MANAGER | 2975 | 3 | 2 |
BLAKE | MANAGER | 2850 | 4 | 3 |
CLARK | MANAGER | 2450 | 5 | 4 |
[예시2]
DENSE_RANK() OVER
역시 PARTITION BY
로 그룹별로 순위를 매길 수 있다.
-- 직업별 월급 순위
SELECT ENAME, SAL, JOB,
DENSE_RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) AS 순위
FROM EMP
WHERE JOB IN ('ANALYST', 'MANAGER');
[결과2]
ENAME | SAL | JOB | 순위 |
---|---|---|---|
FORD | 3000 | ANALYST | 1 |
SCOTT | 3000 | ANALYST | 1 |
JONES | 2975 | MANAGER | 1 |
BLAKE | 2850 | MANAGER | 2 |
CLARK | 2450 | MANAGER | 3 |
[예시3]
DENSE_RANK() OVER
는 새로운 값이 들어왔을 때 그 값의 순위를 알 수 있다.
DENSEN_RNAK()
안에 새로운 값을 기입 후 OVER
대신 WITHIN GROP
을 사용한다.
RANK() OVER
에서도 같은 방식으로 사용 가능하다.
-- 날짜 출력 포맷 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'RRRR-MM-DD';
-- 값 추가 시 해당 값 순위 확인
SELECT DENSE_RANK('1981-11-17') WITHIN GROUP (ORDER BY HIREDATE ASC) 순위
FROM EMP;
[결과3]
순위 |
---|
9 |
Leave a comment