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의 내림차순으로 정렬한 결과에 순차번호를 부여한다.
'프로그래밍 > DB' 카테고리의 다른 글
[ORACLE]ORA-01788: CONNECT BY 구를 지정해 주십시오 (0) | 2017.12.18 |
---|---|
오라클 CEIL, FLOOR함수 (0) | 2013.07.11 |
mysql 한글 깨짐 utf8 설정하기 (0) | 2013.07.08 |
mysql 계정 추가 및 계정 권한 적용 (0) | 2013.07.07 |
mysql 명령어 모음 (0) | 2013.07.06 |