데이터베이스/데이터베이스 공부

그룹 내 순위 함수(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
반응형