-
RANK, DENSE_RANK 함수Oracle 2021. 5. 24. 15:45728x90
오라클에서 순위를 매기는 함수 중 RANK, DENSE_RANK 함수가 있다
특정 범위(PARTITION) 내에서 순위를 구할 수도 있고 전체 범위에 대한 순위를 구할 수도 있다
RANK 와 DENSE_RANK 의 차이점은 문법을 활용하는 방법은 똑같으나
동일한 순위를 하나의 건수로 취급하는 건 DENSE_RANK 이다
예를들어
RANK 의 경우 : 1등, 2등, 2등, 4등
DENSE_RANK 의 경우 : 1등, 2등, 2등, 3등
DENSE_RANK 의 경우 2등이 2개이지만 하나의 건수로 취급하여 다음 등수는 3등이 된다
함수의 사용법은 아래와 같다
전체 범위에서 속성을 기준으로 순위를 구함
RANK() OVER(ORDER BY 속성 DESC/ASC)
속성1을 특정범위로 하여 속성2를 기준으로 순위를 구함
RANK() OVER(PARTITION BY 속성1 ORDER BY 속성2 DESC/ASC)
SQLD 에 있는 간단한 예시로 문법을 살펴보자
[예제] 사원 데이터에서 급여가 높은 순서와 JOB 별로 급여가 높은 순서를 같이 출력한다
문법을 위의 예시에 적용시켜보면
급여를 기준으로 순위를 구하는데 1. 전체 범위에서 2. JOB 를 특정범위로 해서 구해야한다
SELECT JOB, ENAME, SAL, RANK() OVER(ORDER BY SAL DESC) ALL_RANK, RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK FROM EMP;
위와 같이 코드를 작성할 수 있다
728x90728x90'Oracle' 카테고리의 다른 글
[Oracle] 값으로 테이블, 컬럼명 찾기 (0) 2022.05.11 [Oracle] 컬럼명으로 테이블 찾기 (4) 2021.07.23 Oracle EXISTS 서브쿼리 - 존재하는지 안하는지 확인하는 방법 (0) 2021.05.24 CASE - 값에 따라 다르게 SELECT 문 만드는 법 (0) 2021.05.21