[Oracle] 오라클 그룹별 랭크 순위 [RANK OVER PARTITION BY | DENSE_RANK 차이]
개요
그룹별 순위 데이터가 필요한 상황.
테이블에 여러 학급이 있다면 학급별 학생성적순 RANK 순위가 필요하여 데이터를 추출.
RANK () OVER
SELECT CLASS,
RANK () OVER ( PARTITION BY CLASS ORDER BY STUDENT_SCORE DESC ) AS RNK
FROM TABLE;
PARTITION BY 다음에 오는 CLASS(반)는 그룹이 될 데이터.
ORDER BY 다음에 STUDENT_SCORE(학생성적)은 순위를 매길 데이터.
학생 성적순으로 순위 데이터를 추출한다.
학생 성적은 높은순으로 높은 순위가 매겨지기 때문에 정렬을 DESC를 사용했지만 상황에 따라 적절하게 사용하면 된다.
만약에 학생성적이 동일하다면 순위는 동일한 순위가 뽑힌다.
RANK () OVER DATA
CLASS | STUDENT_SCORE | RNK |
1 | 90 | 1 |
1 | 90 | 1 |
1 | 80 | 3 |
위 쿼리로 해당 테이블의 순위를 조회하면 다음과 같이 나온다.
하지만 여기서 학생 데이터에 중복이 있다보니 순위데이터가 1, 1, 3과 같이 나왔다.
1 다음에 2를 출력하려면 DENSE_RANK를 사용한다.
DENSE_RANK() OVER
SELECT CLASS,
DENSE_RANK () OVER ( PARTITION BY CLASS ORDER BY STUDENT_SCORE DESC ) AS RNK
FROM TABLE;
DENSE_RANK() OVER DATA
CLASS | STUDENT_SCORE | RNK |
1 | 90 | 1 |
1 | 90 | 1 |
1 | 80 | 2 |
좋아요♥는 블로그 운영에 큰 도움이 됩니다.
'오라클 DB' 카테고리의 다른 글
[Oracle] 오라클 잡 스케줄러 이름 변경 [JOB NAME CHANGE] (0) | 2023.06.08 |
---|---|
VsCode Git Bash 터미널 사용 세팅 [React 리액트 Yarn] (0) | 2022.12.21 |
[Oracle] 오라클 ORA-02292 무결성 제약조건 자식레코드가 발견되었습니다 처리내용 (0) | 2022.07.20 |
[Oracle] 오라클 다중 Replace의 대안 [Replace 여러개 방법] (0) | 2022.07.19 |
[Oracle] 오라클 잘못된 기본 키입니다 에러 [ORA-02437 을 검증할 수 없습니다] (0) | 2022.07.13 |