All thing of the world!

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

IT/Oracle DBMS

Oracle DENSE_RANK 설명 : 오라클 함수

WorldSeeker 2021. 4. 6. 09:16

1. 함수의 목적 

    Oracle DENSE_RANK는
그룹내에서 정렬된 행의 dense한 순위를 숫자로 반환한다. 
    순위는 1로 시작하는 연속적인 정수이며, 가장 큰 순위 값은 쿼리에서 반환된 unique한 값의 max값이 된다.
    동점의 경우 순위 값은 건너 뛰지 않는다. 동일한 값을 갖는 행은 동일한 순위를 받는다.
    
(올림픽 순위라고 생각하면 간단하다. 1등이 세명이라도 2,3등은 건너뛸 수 없다)
    상위 N 및 하위 N보고에 유용하며, ROW에 가상으로 순서를 매길 때도 많이 사용한다.

  
 (집계 혹은 분석용으로 많이 사용된다)

2. 샘플을 통한 개념 퀵뷰

employees 테이블에서 급여 $ 15,500 및 수수료 5 %를 가진 가상 사원의 순위를 산출하라.

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

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

3. 사용방법  

1) 집계용(aggregate)


2) 분석용(analytic)


4. 함수 PARAMETER 설명

1) 집계용

[expr]
평가할 수를 입력하는 입력파라미터로, 숫자형만 허용한다.
리턴타입도 마찬가지로 숫자형이다.

집계용 DENSE_RANK는 주어진 정렬과 관련하여 함수의 인수로 주어진 가상 행의 조밀도 순위를 계산한다.
함수의 인수는 그룹 내의 단일 행을 식별하기 때문에 각 집계 그룹 내에서 상수로 제공되어야 한다.
상수 표현식과 집계의 order_by_clause에있는 표현식은 위치별로 일치한다.
따라서 dense_rank함수내의 expr과 order by 절의 expr 인수의 수는 동일해야하며, 데이터타입도 호환 가능해야한다.

2) 분석용

분석 함수로의 DENSE_RANK는 order_by_clause내 정의한 값에 따라 소팅되어 리턴된 각 행의 순위를 계산합니다.


5. 다양한 샘플표현

example1) 분석용 샘플로서, employees테이블에서 department_id별로 salary로 소팅한 순서를 DENSE_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;


 

Comments