본문 바로가기

IT/SQL

RANK, DENSE_RANK, ROW_NUMBER 개념 및 차이

RANK 함수

 - RANK 함수는 ORDER BY를 포함한 쿼리문에서 특정 항목에 대한 순위를 구하는 함수이다. 이 때 특정범위 (PARTITION BY) 내에서 순위를 구할수도 있고 전체 데이터에 대한 순위를 구할 수도 있다.

- 동일한 값에 대해서는 동일한 순서를 부여하게 된다.

- ex) RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC)  

 SAL        RANK

1000          1

2000          2

2000          2

3000          4


DENSE_RANK 함수

 - DENSE_RANK 함수는 동일한 순위를 하나의 건수로 취급한다.

 SAL        RANK

1000          1

2000          2

2000          2

3000          3


ROW_NUMBER 함수

 - ROW_NUMBER 함수는 동일한 값이라도 고유한 순위를 부여한다.

 - 동일한 값의 순위를 정해야 할 때 오라클의 경우 ROWID가 적은 행이 먼저 나온다.

 - 만약 동일 값에 대한 순서까지 관리하고 싶으면 ROW_NUMBER() OVER (ORDER BY SAL DESC, ENAME)을 같이 ORDER BY 절을 이용해 추가적인 정렬기준은 정의해야한다.

  SAL        RANK

1000          1

2000          2

2000          3

3000          4