[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

Tags:

Categories:

Updated:

Leave a comment