데이터베이스/데이터베이스 공부
그룹 내 순위 함수(RANK, DENSE_RANK, ROW_NUMBER)
아밍나
2022. 9. 3. 16:56
728x90
1) RANK
ORDER BY를 포함한 QUERY 문에서 특정 칼럼에 대한 순위를 구함.
- 특정 범위(PARTITION)와 전체 데이터에 대한 순위를 구할 수 있다.
- 동일한 값에 대해서는 동일한 순위를 부여한다.
[예제] JOB 별 SALARY 순서 구하기.
SELECT JOB, ENAME, SAL,
RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK
FROM EMP;
[실행 결과]
2) DENSE_RANK
RANK 함수와 유사.
- 동일한 순위를 하나의 건수로 취급한다.
[예제]
SELECT JOB, ENAME, SAL,
RANK() OVER (ORDER BY SAL DESC) RANK,
DENSE_RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) DENSE_RANK
FROM EMP;
[실행 결과]
3) ROW_NUMBER
동일한 값이라도 고유한 순위 부여.
- 동일한 순위를 배제하기 위해 유니크한 순위를 정한다. (ORACLE의 경우 ROWID가 적은 행이 먼저 나옴)
- 동일 값에 대한 순서를 관리하고 싶으면 ORDER BY 절을 이용해 추가적인 정렬 기준을 정의한다.
ex) ROW_NUMBER() OVER (ORDER BY SAL DESC, ENAME)
[예제]
SELECT JOB, ENAME, SAL,
RANK() OVER (ORDER BY SAL DESC) RANK,
ROW_NUMBER() OVER (ORDER BY SAL DESC) ROW_NUMBER
FROM EMP;
[실행 결과]
728x90
반응형