본문 바로가기

SQL/sql

[ORACLE] RANK, ROW_NUMBER, DENSE_RANK -> 펌글

이 세개의 함수는 오라클에서 그룹으로 묶고, 그것에 대한 순위를 정하는 함수이다.
SELECT ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼])
    , RANK() OVER(PARTITION BY [그룹핑할 컬럼]  ORDER BY [정렬할 컬럼])
    , DENSE_RANK() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼])
FROM TABLE_NAME;


기본입력된 데이타가 5명의 학생에 대한 성적정보가 들어있고, 1등이 2명이라면 등수가 어찌될까?
결과는 다음과 같다.
ROW_NUMBER : 1, 2, 3, 4, 5
RANK             : 1, 1, 3, 4, 5
DENSE_RANK  :  1, 1, 2, 3, 4

ROW_NUMBER는 정렬된 순서로 유일값의 번호를 부여한다.
RANK는 동점자에 대해서는 같은 번호를 부여하고 다음 사람에게는 동점자의 수만큼의 번호를 지난 다음번호를 부여한다.
DENSE_RANK는 동점자에 대해서는 같은 번호를 부여하고, 동점자에게 부여된 다음 번호를 부여한다.

'SQL > sql' 카테고리의 다른 글

[ORACLE] INSTR FUNCTION  (0) 2010.10.18