본문 바로가기

[오라클 레퍼런스 함수] DENSE_RANK - 중복된 순위를 건너뛰지 않고 순위 계산 (예) 1-2-2-3

by ㅇㅍㅍ 2023. 8. 4.
[오라클 레퍼런스 함수] DENSE_RANK - 중복된 순위를 건너뛰지 않고 순위 계산 (예) 1-2-2-3
728x90

DENSE_RANK

 

집계 구문

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

 

분석 구문

DENSE_RANK( ) OVER([ query_partition_clause ] order_by_clause)

 

참고:

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

 

목적

DENSE_RANK 함수는 정렬된 그룹 내에서 행의 순위를 계산하고 해당 순위를 NUMBER 형태로 반환합니다. 순위는 1부터 시작하는 연속적인 정수입니다. 가장 큰 순위 값은 쿼리에서 반환되는 unique 값의 개수와 동일합니다. 순위 값은 동점인 경우에도 건너뛰지 않습니다. 즉, 순위 기준으로 값이 같은 행은 동일한 순위를 받습니다. 이 함수는 top-N 및 bottom-N reporting에 유용하게 사용됩니다.

 

이 함수는 모든 숫자 데이터 유형을 인수로 받고 NUMBER를 반환합니다.

 

  • 집계 함수로 사용될 때, DENSE_RANK 함수는 주어진 정렬 기준에 따라 함수의 인수로 식별된 가상의 행의 밀집 순위를 계산합니다. 함수의 인수들은 각 집계 그룹 내에서 상수식으로 평가되어야 합니다. 이는 각 그룹 내의 단일 행을 식별하기 때문입니다. 상수 인수 표현식과 집계의 order_by_clause 내의 표현식은 위치별로 일치해야 합니다. 따라서 인수의 개수와 유형은 호환되어야 합니다.
  • 해석적 함수로 사용될 때, DENSE_RANK 함수는 order_by_clausevalue_exprs의 값에 기초하여 쿼리에서 반환된 각 행의 순위를 다른 행에 대해 계산합니다.

 

참고:

Oracle Database Globalization Support Guide의 부록 C는 DENSE_RANK 함수가 ORDER BY 절에서 문자 값들을 비교하는 데 사용하는 정렬(collation) 결정 규칙에 대한 정보를 제공합니다.

 

집계 예제

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

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

Dense Rank
----------
         3

 

분석 예제

다음 문은 샘플 hr 스키마의 부서 60에 속하는 직원들을 연봉에 따라 순위를 매깁니다. 동일한 연봉 값을 가진 직원들은 같은 순위를 받습니다. 하지만, 순위가 건너뛰는 일은 없습니다. 이 예제를 RANK 함수의 분석적인 사용 예제와 비교하세요.

SELECT department_id, last_name, salary,
       DENSE_RANK() OVER (PARTITION BY department_id ORDER BY salary) DENSE_RANK
  FROM employees WHERE department_id = 60
  ORDER BY DENSE_RANK, last_name;
 
DEPARTMENT_ID LAST_NAME                     SALARY DENSE_RANK
------------- ------------------------- ---------- ----------
           60 Lorentz                         4200          1
           60 Austin                          4800          2
           60 Pataballa                       4800          2
           60 Ernst                           6000          3
           60 Hunold                          9000          4

 


출처: 오라클 레퍼런스

원문 링크: Oracle DENSE_RANK 함수 문서

 

반응형

댓글