본문 바로가기

개발 & 코딩/Oracle

오라클 DB 순위 구하기

1. 순위는 구하되 같은 값의 순서는 무시하는 방법

ROW_NUMBER() OVER(ORDER BY 정렬할 필드)
100, 90, 90, 80, 80, 80, 70, 60의 값이 있을 때 순위는 1, 2, 3, 4, 5, 6, 7, 8 이 된다.

 

2. 같은 값은 동등한 순위로 매기는 방법

RANK() OVER(ORDER BY 정렬할 필드)
100, 90, 90, 80, 80, 80, 70, 60의 값이 있을 때 순위는 1, 2, 2, 4, 4, 4, 7, 8 이 된다.

 

3. 같은 값은 동등한 순위로 매기지만 다음 순위가 순차적으로 매겨지는 방법

DENSE_RANK() OVER(ORDER BY 정렬할 필드)
100, 90, 90, 80, 80, 80, 70, 60의 값이 있을 때 순위는 1, 2, 2, 3, 3, 3, 4, 5 가 된다.

 

4. 그룹별 순위 구하기 예제

ROW_NUMBER() OVER(PARTITION BY 그룹화할 필드 ORDER BY 정렬할 필드)

 ex) ROW_NUMBER() OVER(PARTITION BY A ORDER BY A, B) RNUM, A, B
     FROM(
      SELECT '가족' A, '아버지' B FROM DUAL
      UNION
      SELECT '가족' A, '어머니' B FROM DUAL
      UNION
      SELECT '가족' A, '형' B FROM DUAL
      UNION
      SELECT '가족' A, '누나' B FROM DUAL
      UNION
      SELECT '친척' A, '삼촌' B FROM DUAL
      UNION
      SELECT '친척' A, '이모' B FROM DUAL
      ORDER BY A, B)