'DENSE_RANK'에 해당되는 글 1건

명단에서 총 순위의 80%에 해당하는 사람의 정보가 나와야 하는 경우가 생겼다.
rownum 같은경우는 order by 하기 전에 미리 번호가 부여되어있기때문에 order by해 버리면 번호가 뒤죽박죽된다.

이럴 경우 rank(), dense_rank(), row_number() 함수를 사용하면 된다.
하지만 문제는 내가 사용하는 오라클 시스템 버전이 너무 하위버전이라 이 함수들이 적용될지가 문제..

다행히도 지원해준다.

rank(), dense_rank()와 row_number()의 차이점은 1등이 2명있을경우 row_number()는 두번째 sorting되는 값이 1이 아닌 2를 가지게 된다. 즉 첫번째, 두번째가 동점일지라도 순위는 1, 2로 값을 다르게 부여한다.
dense_rank()는 위의 경우에 1, 1로 값이 들어가고 세번째에는 2가들어간다. 마지막으로 rank()는 1, 1 그리고 3이 들어간다.

*예
성명
점수
rank() dense_rank()
row_number()
A 100 1 1
1
B 100 1 1 2
C 90 3 2 3
D 80 4 3 4


*사용법
[rank()||dense_rank()||row_number()] over (partition by '그룹화 할 필드' order by '정렬 필드' [desc||asc])

블로그 이미지

2010년1월어느날..

,