안녕하세요 기요밍 입니다.
오라클을 이용하다보면 특정 컬럼를 기준으로 최상위 데이터, 또는 상위 몇개의 데이터를 뽑아야 하는 경우가 생깁니다. 이런경우 Rank() 함수 또는 Row_Number() 함수를 사용하면 되는데요.
이번엔 이 두개 함수의 사용법과 차이점에 대해서 알아보겠습니다.
1. 사용법
|
두함수는 대부분 Partition By, Order By절과 함께 사용 됩니다.
▣ Rank()
→ SELECT RANK() OVER(PARTITION BY [Groupping Column] ORDER BY [Ordering Column] DESC) ROW_NUM, A.* FROM [대상 테이블] A
만약 시험 성적 테이블인 EXAM_INFO 테이블에서 반별(CLASS_NUMBER) 수학점수(MATH_SCORE)로 등수를 매겨보고 싶다. 그러면 아래와 같이 쿼리를 작성하면 됩니다.
SELECT RANK() OVER(PARTITION BY CLASS_NUMBER ORDER BY MATH_SCORE DESC) ROW_NUM, A.* FROM EXAM_INFO A
▣ Row_Number()
→ SELECT ROW_NUMBER() OVER(PARTITION BY [Groupping Column] ORDER BY [Ordering Column] DESC) ROW_NUM, A.* FROM [대상 테이블] A
만약 시험 성적 테이블인 EXAM_INFO 테이블에서 반별(CLASS_NUMBER) 수학점수(MATH_SCORE)로 등수를 매겨보고 싶다. 그러면 아래와 같이 쿼리를 작성하면 됩니다.
SELECT ROW_NUMBER() OVER(PARTITION BY CLASS_NUMBER ORDER BY MATH_SCORE DESC) ROW_NUM, A.* FROM EXAM_INFO A
RANK() 함수와 함수명을 제외하고는 동일하죠?^^
그렇다면 두 함수의 차이점은 무엇일까요?
2. 차이점
|
두개의 함수는 순서를 매긴.. 즉 Order by를 한 데이터가 동일한 경우에 다른 결과를 리턴 합니다.
Rank() 함수는 중복되는 데이터에 대해서 동일한 Number를 Row_Number()는 다른 등수를 출력 합니다.
만약 학생들의 점수 Score에 대해서 순서를 매긴 경우 4명이 100점, 90점, 90점, 80점 이렇게 점수를 받았다면..
점수 |
Rank() |
Row_Number() |
100 |
1 |
1 |
90 |
2 |
2 |
90 |
2 |
3 |
80 |
4 |
4 |
이렇게 결과가 나오는 거겠죠..
출력 방법에 따라서 원하는 함수를 사용 하시면 됩니다.
'데이터베이스 > Oracle' 카테고리의 다른 글
[Oracle] 오라클 Select 심화 with as 로 임시(Temp) 테이블 이용하기 (0) | 2015.09.27 |
---|---|
[Oracle] 오라클 Select, Update, Delete, Insert 하는법 하는방법 (0) | 2015.09.05 |
[Oracle] 오라클 varchar, varchar2 차이점 (0) | 2015.08.14 |
[Oracle] 오라클 시퀀스(Sequence) 생성 수정 삭제하기 (0) | 2015.08.10 |
[Oracle] 오라클 에러 ORA-00904: invalid identifier / 부적합한 식별자 (0) | 2015.07.23 |