본문 바로가기

[오라클 레퍼런스 함수] RANK - 그룹 내 값의 순위 계산

by ㅇㅍㅍ 2023. 8. 15.
[오라클 레퍼런스 함수] RANK - 그룹 내 값의 순위 계산
728x90

 

RANK

 

집계 구문

RANK(expr [, expr ]...) WITHIN GROUP
   (ORDER BY
    expr [ DESC | ASC ]
         [ NULLS { FIRST | LAST } ]
    [, expr [ DESC | ASC ]
            [ NULLS { FIRST | LAST } ]
    ]...
   )

 

분석 구문

RANK( )
   OVER ([ query_partition_clause ] order_by_clause)

 

참고:

구문, 의미, 그리고 제한 사항에 대한 정보는 Analytic Functions에 대한 내용을 참조하세요.

 

목적

RANK는 값의 그룹 내 순위를 계산합니다. 반환 유형은 NUMBER입니다.

 

참고:

암묵적 변환에 대한 자세한 내용은 표 2-8을 참조하고, 숫자 우선순위에 관한 정보는 "Numeric Precedence"를 참조하십시오.

 

동일한 랭킹 기준값을 가지는 행은 동일한 랭크를 받습니다. 그런 다음 Oracle Database는 묶인 행의 수를 묶인 랭크에 추가하여 다음 랭크를 계산합니다. 따라서 랭크는 연속적인 숫자가 아닐 수 있습니다. 이 함수는 상위-N 및 하위-N 보고서 작성에 유용합니다.

  • 집계 함수로 사용될 때 RANK는 주어진 정렬 규격에 따라 함수의 인수로 식별된 가상 행의 순위를 계산합니다. 함수의 인수는 각 집계 그룹 내에서 상수 식으로 평가되어야 합니다. 그들은 각 그룹 내에서 단일 행을 식별하기 때문입니다. 상수 인수 식과 집계의 ORDER BY 절의 식은 위치별로 일치합니다. 따라서 인수의 수가 동일하고 그 유형이 호환 가능해야 합니다.
  • 분석 함수로 사용될 때 RANKvalue_exprs의 값에 기초하여 order_by_clause의 다른 행들과의 비교를 통해 쿼리에서 반환된 각 행의 순위를 계산합니다.

 

참고:

  • Oracle Database Globalization Support Guide의 부록 C는 ORDER BY 절에서 문자 값 비교에 사용되는 정렬을 정의하는 정렬 파생 규칙(collation derivation rules)에 대한 정보를 제공합니다.

 

집계 예제

다음 예제는 급여가 $15,500이고 커미션 비율이 5%인 샘플 테이블 hr.employees의 가상 직원의 순위를 계산합니다:

SELECT RANK(15500, .05) WITHIN GROUP
   (ORDER BY salary, commission_pct) "Rank"
   FROM employees;

      Rank
----------
       105

 

마찬가지로, 다음 쿼리는 $15,500의 급여를 가진 직원 급여 중에서의 순위를 반환합니다:

SELECT RANK(15500) WITHIN GROUP 
   (ORDER BY salary DESC) "Rank of 15500" 
   FROM employees;

Rank of 15500
--------------
             4

 

분석 예제

다음 문장은 샘플 hr 스키마의 부서 60에 속하는 직원들을 급여를 기준으로 순위를 매깁니다. 동일한 급여 값은 동일한 순위를 받으며, 이로 인해 비연속적인 순위가 발생합니다. 이 예제를 DENSE_RANK에 대한 분석적 예제와 비교해보세요.

SELECT department_id, last_name, salary,
       RANK() OVER (PARTITION BY department_id ORDER BY salary) RANK
  FROM employees WHERE department_id = 60
  ORDER BY RANK, last_name;

DEPARTMENT_ID LAST_NAME                     SALARY       RANK
------------- ------------------------- ---------- ----------
           60 Lorentz                         4200          1
           60 Austin                          4800          2
           60 Pataballa                       4800          2
           60 Ernst                           6000          4
           60 Hunold                          9000          5

 


출처: 오라클 레퍼런스

원문 링크: Oracle RANK 함수 문서

 

반응형

댓글