All thing of the world!

Oracle RANK 설명 : 오라클 함수 본문

IT/Oracle DBMS

Oracle RANK 설명 : 오라클 함수

WorldSeeker 2021. 4. 5. 09:22

1. 함수의 목적

   Oracle RANK는 그룹내의 값 순위를 구한다.
   순위 기준에 대해 동일한 값을 갖는 행은 동일한 순위를 갖는다.
   동일한 순위를 갖는 행이 여러개 일 경우, 묶여진 행 수를 추가하여 다음 순위를 계산하기 때문에 순위는 연속적인 숫자가 아닐 수 있다.
    이 기능은 TOP-N 및 BOTTOM-N에 유용하다.


2. 샘플을 통한 개념 퀵뷰

hr.employees에서 급여가 $ 15,500이고 수수료가 5 % 인 직원의 순위를 계산한다.

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

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

3. 사용방법  
  
    1) 집계함수

집계 함수로서, RANK는 주어진 ORDER BY 스펙과 관련하여 함수의 인수로 식별된 행의 순위를 계산한다.
함수의 인수는 각 그룹내의 단일행을 식별하기 때문에 각 집계 그룹 내에서 상수 표현식이여야 한다.
상수 인수 표현식과 집계의 ORDER BY 절에있는 표현식은 위치별로 일치해야 한다.
따라서 인수의 수는 같아야하며 형식은 호환 가능해야한다.


   
 2) 분석함수

분석 함수로서 RANK는 order_by_clause를 기반으로 쿼리가 반환한 각 행의 순위를 계산한다

4. 함수 PARAMETER 설명 

반환되는 데이터값든 NUMBER 타입이다.

5. 다양한 샘플표현

example1) 다음 쿼리는 직원 급여 중 15,500 달러의 급여에 대한 순위를 반환한다.

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

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


example2) 급여를 기준으로 부서 60의 직원의 순위를 매 깁니다. 동일한 급여값은 동일한 순위(2)를 받고, 그 다음 순위(4)는 비연속적인 순위를 발생시키는 것에 주의하자.

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;

DENSE_RANK와 비교해 보자.

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

결과와 같이   DENSE_RANK는 동일한 순위값 뒤의 숫자가 연속적이다.

이것이 RANK와 DENSE_RANK의 차이점이다.

 

Comments