티스토리 뷰

| 순위를 표현하는 함수

오늘은 오라클에서 순위를 표현할 때 쓰는 함수 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함