Patrick's 데이터 세상

순위 함수 본문

Programming/Oracle

순위 함수

patrick610 2020. 6. 21. 14:59
반응형
SMALL

순위 함수

 

 

* RANK 함수

   

 - 특정 항목(컬럼)에 대한 순위를 구하는 함수

 - 특정 범위(Partition) 내에서 순위를 구할 수도 있고 전체 데이터에 대한 순위를 구할 수도 있습니다.

 

 EX)

SELECT JOB
     , ENAME
     , SAL
     , RANK() OVER (ORDER BY SAL DESC) ALL_RANK
     , RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK
FROM EMP;

 

- RANK() OVER(ORDER BY SAL DESC) : 전체에 대한 순위입니다.

- RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) : 각각 파티션 그룹 항목에 대한 순위입니다.

 

결과) 

JOB 

ENAME 

SAL 

ALL_RANK 

JOB_RANK 

PRESIDENT 

KING 

5000 

1 

1 

ANALYST 

FORD 

3000 

2 

1 

ANALYST 

SCOTT 

3000 

2 

1 

MANAGER 

JONES 

2975 

4 

1 

MANAGER 

BLAKE 

2850 

5 

2 

 

 

* DENSE_RANK 함수

 

 - RANK 함수와 흡사하나, 동일한 순위를 하나의 건수로 취급하는 것이 다른 점입니다.

 

 EX) 

SELECT JOB
     , ENAME
     , SAL
     , RANK() OVER (ORDER BY SAL DESC) RANK
     , DENSE_RANK() OVER (ORDER BY SAL DESC) DENSE_RANK
FROM EMP;

- 사원데이터에서 급여가 높은 순서와 동일한 순위를 하나의 등수로 간주한 결과도 같이 출력

 

 결과)

JOB 

ENAME 

SAL 

RANK 

DENSE_RANK 

PRESIDENT 

KING 

5000 

1

1

ANALYST 

FORD 

3000 

2

2

ANALYST 

SCOTT 

3000 

2

2

MANAGER 

JONES 

2975 

4

3

MANAGER 

BLAKE 

2850 

5

4

- FORD와 SCOTT은 동일한 SALARY이므로 RANK와 DENSE_RANK 컬럼에서 모두 같은 순위를 부여합니다.

 

 

* ROW_NUMBER 함수

 

 - RANK나 DENSE_RANK 함수가 동일한 값에 대해서는 동일한 순위를 부여하는데 반해, ROW_NUMBER는 동일한 값이라도 고유한 순위를 부여합니다.

 

 EX) 

SELECT JOB
     , ENAME
     , SAL
     , RANK() OVER (ORDER BY SAL DESC) RANK
     , ROW_NUMBER() OVER (ORDER BY SAL DESC) ROW_NUMBER
FROM EMP;

- 급여가 높은 순서와 동일한 순위를 인정하지 않는 등수도 같이 출력한다.

 

결과)

JOB 

ENAME 

SAL 

RANK 

ROW_NUMBER

PRESIDENT 

KING 

5000 

1

1

ANALYST 

FORD 

3000 

2

2

ANALYST 

SCOTT 

3000 

2

3

MANAGER 

JONES 

2975 

4

4

MANAGER 

BLAKE 

2850 

5

5

 

데이터베이스 별로 다른 결과가 나올 수 있으므로, ROW_NUMBER() OVER (ORDER BY SAL DESC, ENAME)  같이 ORDER BY 절을 이용해 추가적인 정렬 기준을 정의해야 합니다.

 

 

 

 

 

반응형
LIST

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

그룹 내 행 순서 함수  (0) 2020.06.21
일반 집계 함수  (0) 2020.06.21
텍스트 제어 함수  (0) 2020.06.21
데이터 조작 함수  (0) 2020.06.21
DCL - COMMIT, ROLLBACK, GRANT, REVOKE 구문  (0) 2020.06.21
Comments