'Oracle'에 해당되는 글 18건

 

안녕하세요 기요밍 입니다.

오라클을 이용하다보면 특정 컬럼를 기준으로 최상위 데이터, 또는 상위 몇개의 데이터를 뽑아야 하는 경우가 생깁니다. 이런경우 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

 

이렇게 결과가 나오는 거겠죠..

출력 방법에 따라서 원하는 함수를 사용 하시면 됩니다.

블로그 이미지

기요밍b

IT와 게임 블로그 입니다!!^^

,