티스토리 뷰
| 순위를 표현하는 함수
오늘은 오라클에서 순위를 표현할 때 쓰는 함수 RANK( ) OVER 그리고 NUMBER_ROW( ) OVER에 대해 알아보겠습니다.
1. RANK( ) OVER ( [query] ORDER BY(*필수) )
SQL 구문은 위와 같습니다. 한 번 예제를 이용하여 사용해보겠습니다.
예제 ) 영업 부서에 속하는 사원을 대상으로 급여가 높은 상위 6명의 사원을 얻어보세요.
쿼리문 )
select *
from
(
select d.department_id, last_name, salary, rank() over (order by salary desc) rnk
from employees e, departments d
where e.department_id = d.DEPARTMENT_ID
and department_name = 'Sales'
)
where rnk <= 6;
| 서브 쿼리( 하나의 SQL 문장 내에 또 다른 SQL문이 있는 쿼리문 )내 문장에서 rank() over을 사용하였고,
order by를 통해 급여가 높은 순서대로 정렬하였습니다.
결과값 )
80 Russell 14000 1
80 Partners 13500 2
80 Errazuriz 12000 3
80 Ozer 11500 4
80 Cambrault 11000 5
80 Abel 11000 5
| 결과 값을 보시면 맨 우측 순서대로 나온 것이 RANK() OVER 결과 값 입니다.
RANK() 함수는 중복 순위가 나타납니다. 그래서 Abel 다음 순위는 6이 아닌 7부터 시작하게 됩니다.
2. ROW_NUMBER( ) OVER ( [query] ORDER BY(*필수) )
SQL 구문은 위와 같습니다. 위와 같은 예제를 통해 사용해보겠습니다.
예제 ) 영업 부서에 속하는 사원을 대상으로 급여가 높은 상위 6명의 사원을 얻어보세요.
쿼리문 )
select *
from
(
select d.department_id, last_name, salary, row_number() over (order by salary desc) rnk
from employees e, departments d
where e.department_id = d.DEPARTMENT_ID
and department_name = 'Sales'
)
where rnk <= 6;
| 서브 쿼리( 하나의 SQL 문장 내에 또 다른 SQL문이 있는 쿼리문 )내 문장에서 row_number() over을 사용하였고,
order by를 통해 급여가 높은 순서대로 정렬하였습니다. 위에서 바뀐 점은 row_number() over을 사용한 것입니다.
결과값 )
80 Russell 14000 1
80 Partners 13500 2
80 Errazuriz 12000 3
80 Ozer 11500 4
80 Cambrault 11000 5
80 Abel 11000 6
| 결과 값을 보시면 맨 우측 순서대로 나온 것이 ROW_NUMBER() OVER 결과 값 입니다.
RANK() 함수와 달리 같은 데이터도 중복된 순위가 없습니다. 중복과 관계없이 무조건 순서대로 순위를 나타내게 됩니다.
헷갈리실 수 있으니 확실하게 기억해두세요!
감사합니다!
'프로그래밍 > ORACLE' 카테고리의 다른 글
오라클 계정 잠금 풀기 (0) | 2018.08.25 |
---|---|
오라클 컬럼 추가 및 삭제 수정 (0) | 2018.08.18 |