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_clause의 value_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 함수 문서
'코딩 > 오라클 함수' 카테고리의 다른 글
[오라클 레퍼런스 함수] DEREF - 객체 참조를 추출 (0) | 2023.08.04 |
---|---|
[오라클 레퍼런스 함수] DEPTH - UNDER_PATH와 EQUALS_PATH 조건에서 경로의 레벨 수 반환 (0) | 2023.08.04 |
[오라클 레퍼런스 함수] DECOMPOSE - Unicode 분해 적용 결과 반환 (0) | 2023.08.04 |
[오라클 레퍼런스 함수] DECODE - 값에 따른 결과값 변환 (0) | 2023.08.03 |
[오라클 레퍼런스 함수] DBTIMEZONE - 데이터베이스의 시간대(time zone) 값을 반환 (0) | 2023.08.03 |
댓글