[Oracle] 그룹과 순위결정을 동시에 - rank(), dense_rank() [도레코딩]

Oracle에는 그룹 짓기와 순위 결정을 동시에 할 수 있다.

바로 Window_function을 사용하는 것이다.

형식은 아래와 같다.

    window_function (args) over ([partition by절][order by절][windowing절])
    - args 함수인자(컬럼명) 0개~n개
    - partition by : 전체 집합을 다시 그룹핑하기 위한 구문
    - order by : 행간의 정렬
    - windowing절 : 대상행을 지정

 

Rank()


Employee Table

위 Employee 테이블에서 부서별(Dept_code) 급여 순위를 조회하고 싶을때 간단하게 rank함수를 사용하여 데이터를 뽑아낼 수 있다.

select 
	emp_name, salary,
	rank() over(partition by dept_code order by salary desc) "RANK"
from employee;

 

쿼리문을 실행한 결과

Dense_rank()


rank() 함수는 중복된 값이 있다면 중복된 만큼 건너뛰고 순위를 부여한다.

만약, 건너뜀 없이 순위를 매기고 싶으면 dense_rank()를 사용하면 된다.

select
    emp_name,
    salary,
    rank() over(order by salary desc) "rank",
    dense_rank() over(order by salary desc) "rank"
from
    employee;

 

 

'DataBase > Oracle' 카테고리의 다른 글

Oracle Cloud 19c, Java Project 연동하기 [도레 코딩]  (0) 2022.03.22