프로그래밍/DB

오라클 순위 반환 함수들

guitarhero 2013. 7. 11. 13:38
728x90

1. RANK() : 순위를 반환하는 함수 

 

select employee_id, salary, rank() over(order by salary desc) salary_ranking from employees;

 

2. DENSE_RANK() : 순위를 반환하지만 공동 2위가 2명일경우 3위자리는 사라지고 4위가 반환되는데 2위 다음 3위가 바로 나오게 할 경우 사용하는 함수

 

select employee_id, salary, rank() over(order by salary desc) ranking1, dense_rank() over(order by salary desc) ranking2 from employees;

 

3. ROW_NUMBER 함수는 1부터 시작해서 각 로우별로 순차적으로 값을 반환, 중복없음.

 

select employee_id, salary, rank() over(order by salary desc) ranking1, dense_rank() over (order by salary desc) ranking2, row_number() over(order by salary desc) ranking3 from employees; 

 employee_id

 salary

 ranking1

 ranking2

 ranking3

 100

 2400

 1

 1

 1

 101

 1700

 2

 2

 2

 102

 1700

 2

 2

 3

 103

 1400

 4

 3

 4

 

4. row_number()함수를 이용하여 상위 N명의 명단을 추출, 인라인뷰를 사용함.

 

select t.* from (select deparment_id, last_name, slary, row_number() over(partiotion by department_id order by salary desc) sal from employees) t

where t.sal <= 3;

 department_id

 last_name

 salary

 sal

 10

 net

 440

 1

 20

 kebi

 1300

 1

 20

 kebinet

 600

 2

 30

 princess

 1100

 1

 

5. partition by 는 분류를 나눔.

 

select row_number() over(partition by department_id order by salary desc) ranking4;

순차적 번호를 부여하되, department_id별로 나눠 각 분류를 salary의 내림차순으로 정렬한 결과에 순차번호를 부여한다.


728x90