포스팅 목차
o RANK
문 법
- 집계 문법
rank_aggregate::=
- 분석 문법
rank_analytic::=
목 적
RANK함수는 값의 그룹에서 값의 순위를 계산한다. 반환되는 데이터형은 NUMBER이다.
같은 순위를 가지는 순위 기준에 대해서는 같은 값을 가진다. 오라클 데이터베이스는 동일한 행에 대해 동일한 순위를 더하고, 다음의 순위를 계산한다. 그런 이유로 RANK가 연속하지 않는 숫자일 수 있다. 이 함수는 top-N과 bottom-N 리포팅에 유용하다.
- 집계 함수로써 RANK함수는 주어진 소트 지정에 따라서 함수의 인수에 의해 식별된 불확실한 행의 순위를 측정한다. 함수의 인수는 각 그룹 내의 단일 행을 식별하기 위해서, 각 집계 그룹 내의 상수 표현은 평가될 필요가 있다. 상수 인수식 과 집계의 ORDER BY구문의 식의 위치는 일치한다. 그르므로, 인수의 수는 같아야 하고, 그 형태는 호환되어야 한다.
- 분석 함수로써 RANK함수는 order_by_clause에서 value_exprs의 값에 근거하여서, 쿼리에 의해 반환되는 다른 여러 행들에 대해서 쿼리로부터 반환되는 각 행의 순위를 계산한다.
패키지 함수 비교(Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table)
관련 함수
함수명 | 함수 내용 |
CUME_DIST |
그룹에 존재하는 관측치의 누적 분포 값을 계산한다. |
DENSE_RANK | Rank()와 유사한 함수로 각 그룹별로 ORDER BY절에 사용된 칼럼이나 표현식을 기준으로 정렬하고, 그룹 내의 각 열에 대한 순위를 부여한다. |
LAG | 이 함수는 Self 조인 작업 수행하지 않고, 하나의 테이블을 접근하면서 여러 개의 행에 동시에 접근(Access)하여 작업한다. LAG 함수는 현재 위치를 기준으로 이전에 지정한 행에 접근하여 작업을 수행한다. |
LEAD | 이 함수는 Self 조인 작업을 수행하지 않고, 하나의 테이블을 접근하면서 여러 개의 행에 동시에 접근(Access)하여 작업한다. 쿼리에서 수행되는 행의 Series나 커서의 위치를 지정하면, LEAD 함수는 해당 위치 이후에 존재하는 물리적 Offset의 행에 ACCESS 한다. |
NTILE | 그룹 내에서 정렬된 데이터를 expr에 의해 지정된 bucket의 수로 분할하여, 각 행을 적절한 bucket의 번호를 부여하여 할당한다. |
PERCENT_RANK |
인수로 지정한 값의 그룹 내의 위치를 나타내는 백분위 순위(순위 퍼센트, Percent rank)를 반환한다. |
RANK | 값의 그룹에서 값의 순위를 계산한다. 반환되는 데이터형은 NUMBER이다. |
ROW_NUMBER | 이 함수는 파티션 그룹별 또는 전체 데이터에 대하여 order_by_clause에서 지정된 행의 정렬 순위대로 1로 시작하는 중복을 허용하지 않는 유일한(unique) 순서 값을 할당한다. (파티션에서 각 행 또는 쿼리에 의해서 반환되는 각 행에 대하여) |
예 제
- 집계 함수 예제
다음 예제는 hr.employees테이블에서 급여가 $15,500이고, 수수료가 5%인 불확정한 종업원의 순위를 계산한다.
Oracle Program |
SELECT RANK(15500, .05) WITHIN GROUP (ORDER BY salary, commission_pct) "Rank"
FROM employees;
Results |
Rank
----------
105
유사하게, 종업원의 급여 사이에 급여가 %15,500인 종업원의 순위를 반환한다.
Oracle Program |
SELECT RANK(15500) WITHIN GROUP (ORDER BY salary DESC) "Rank of 15500"
FROM employees;
Results |
Rank of 15500
--------------
4
- 분석함수 예제
다음 예제는 급여와 수수료에 근거하여 부서 80에서 종업원의 순위를 계산한다. 동일한 급여에 대해 동일 순위가 부여된다. DENSE_RANK참조.
Oracle Program |
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;
Results |
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
오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크 |
반응형
'오라클 게시판 > 오라클 함수' 카테고리의 다른 글
【오라클(Oracle) SQL 함수】 RAWTOHEX 함수 (0) | 2021.10.19 |
---|---|
【오라클 SQL 함수】 RATIO_TO_REPORT 함수 (0) | 2021.10.19 |
[오라클 SQL 함수] PRESENTNNV 함수 (0) | 2021.10.19 |
[오라클 SQL 함수] PREVIOUS 함수 (0) | 2021.10.19 |
[오라클 SQL 함수] PRESENTV 함수 (0) | 2021.10.19 |
댓글