본문 바로가기

아이티/oracle&DB

오라클함수 rank()와 dense_rank()의 차이점

WITH TEMP AS (
SELECT '1' CD, 'AAA' DESC_TEXT FROM DUAL
UNION ALL
SELECT '1' CD, 'ASD' DESC_TEXT FROM DUAL
UNION ALL
SELECT '2' CD, 'SDF' DESC_TEXT FROM DUAL
UNION ALL
SELECT '3' CD, 'ASA' DESC_TEXT FROM DUAL
UNION ALL
SELECT '3' CD, 'RRR' DESC_TEXT FROM DUAL
UNION ALL
SELECT '4' CD, 'DDD' DESC_TEXT FROM DUAL
)
SELECT A.*
, RANK() OVER(ORDER BY CD) RN
, DENSE_RANK() OVER (ORDER BY CD) DRN
FROM TEMP A

* 주의 : RANK와 DENSE_RANK는 ORDER BY 절에서 쓰이는 컬럼이 있어야 사용가능하다.

일단 쿼리를 실행하여보자!!

아래는 결과값이다.

 



RANK를 사용하면 로우갯수에 상관을 받아 1, 2, 2(3), 4, 4(5), 6 이런식으로 카운터가 되며, 
DENSE_RANK를 사용하면 로우갯수 상관없이 1, 2, 2, 3, 4 이런식으로 건너뛰지 않고 카운트된다.
*설명 : ()괄호는 세번째행을 나타냄


순위나 순서를 구분지을때 적절히 사용해보자!! :)