[SQLD/P] rank(), dense_rank(), row_num

Hyo Kyun Lee·2022년 11월 15일
0

SQLD/P

목록 보기
42/82

1. 개요

Select 쿼리의 결과를 특정 기준으로 일련번호를 매기고자 할때, 즉 순번을 부여할때 3가지 방법을 사용할 수 있다.

이 3가지 방법은 공통적으로 쿼리의 결과를 바탕으로 순번을 부여한다는 점이고 연산의 결과 자체를 바꾸지는 않는다.

다만 OREDER BY와 같은 특정 문법을 사용하여 쿼리를 재정렬하여 그 재정렬한 결과를 쿼리결과로 보여준다는 특징이 있고, 이 ORDER BY 키워드는 필수로 사용해야 한다.

차이점은 순번을 매기는 방식이나 과정에 있고, 각 차이점에 유의하면서 각 함수를 사용하면 될 것이다.

2. 사용방법

  • COLUMN을 기준으로 내림차순하여 쿼리 결과를 정렬하고 순번을 매기고 싶을때

RANK() over (ORDER BY COLUMN ASC)
DENSER_RANK() over (ORDER BY COLUMN ASC)
ROW_NUMBER() over (ORDER BY COLUMN ASC)

2-1. rank()

  • RANK() over (ORDER BY COLUMN ASC)

COLUMN을 기준으로 순번을 매기는데, COLUMN이 동률이라면 같은 등수로 처리한다.
해당 등수의 수만큼 그 다음의 순번은 밀려난다(1 2 2 4..)

2-2. dense_rank()

  • DENSER_RANK() over (ORDER BY COLUMN ASC)

COLUMN을 기준으로 순번을 매기는데, COLUMN이 동률이라면 같은 등수로 처리한다.
해당 등수가 얼마나 동률인지에 상관없이, 그 다음의 순번은 동일하게 진행한다(1 2 2 3 ..)

2-3. ROW_NUMBER()

  • ROW_NUMBER() over (ORDER BY COLUMN ASC)

COLUMN을 기준으로 순번을 매기고, 동률 상관없이 정렬한 결과 그대로 순번을 매긴다(1 2 3 4 ..).

3. 참고자료

각 함수의 차이점 정리 - https://log-laboratory.tistory.com/350

0개의 댓글