문법 |

그림 설명
분석
문법
rank_analytic::=
![]()
목적 |
RANK함수는 값의 그룹에서 값의 순위를 계산한다. 반환되는 데이터형은 NUMBER이다.
같은 순위를 가지는 순위 기준에 대해서는 같은 값을 가진다. 오라클 데이터베이스는 동일한 행에 대해 동일한 순위를 더하고, 다음의 순위를
계산한다. 그런 이유로 RANK가 연속하지 않는 숫자일수 있다. 이 함수는 top-N과 bottom-N 리포팅에 유용하다.
집계 함수로써 RANK함수는 주어진 소트 지정에 따라서 함수의 인수에 의해 식별된 불확실한 행의
순위를 측정한다.함수의 인수는 각 그룹내의 단일 행을 식별하기 위해서, 각 집계 그룹내의 상수 표현은 평가될 필요가 있다. 상수 인수식 과
집계의 ORDER BY구문의 식의 위치는 일치한다. 그르므로, 인수의 수는 같아야 하고, 그 형태는 호환되어야한다.
분석 함수로써 RANK함수는 order_by_clause에서 value_exprs의 값에
근거하여서, 쿼리에 의해 반환되는 다른 여러 행들에 대해서 쿼리로부터 반환되는 각 행의 순위를 계산한다.
예제 |
다음 예제는 hr.employees테이블에서 급여가
$15,500이고, 수수료가 5%인 불확정한 종업원의 순위를 계산한다.
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
다음 예제는 급여와 수수료에 근거하여 부서 80에서
종업원의 순위를 계산한다. 동일한 급여에 대해 동일 순위가 부여된다. DENSE_RANK참조.
SELECT department_id, last_name, salary, commission_pct,
RANK() OVER (PARTITION BY department_id
ORDER BY salary DESC, commission_pct) "Rank"
FROM employees WHERE department_id = 80;
DEPARTMENT_ID LAST_NAME SALARY COMMISSION_PCT Rank
------------- ------------------------- ---------- -------------- ----------
80 Russell 14000 .4 1
80 Partners 13500 .3 2
80 Errazuriz 12000 .3 3
80 Ozer 11500 .25 4
80 Cambrault 11000 .3 5
80 Abel 11000 .3 5
80 Zlotkey 10500 .2 7
80 Vishney 10500 .25 8
80 Bloom 10000 .2 9
80 Tucker 10000 .3 10
80 King 10000 .35 11
80 Fox 9600 .2 12
80 Greene 9500 .15 13
80 Bernstein 9500 .25 14
80 Sully 9500 .35 15
80 Hall 9000 .25 16
80 McEwen 9000 .35 17
80 Hutton 8800 .25 18
80 Taylor 8600 .2 19
80 Livingston 8400 .2 20
80 Olsen 8000 .2 21
80 Smith 8000 .3 22
80 Cambrault 7500 .2 23
80 Doran 7500 .3 24
80 Smith 7400 .15 25
80 Bates 7300 .15 26
80 Marvins 7200 .1 27
80 Tuvault 7000 .15 28
80 Sewall 7000 .25 29
80 Lee 6800 .1 30
80 Ande 6400 .1 31
80 Banda 6200 .1 32
80 Johnson 6200 .1 32
80 Kumar 6100 .1 34