[퀴즈] 8.0 버전용 랭킹쿼리 작성
[요구사항]
사원테이블에서 사원의 점수에 대한 전체 순위와 부서별 순위를 구하고
부서코드, 부서별순위, 사원번호 순으로 정렬하여 조회하세요.
개발자 마농군은 위 요구사항에 따라 개발환경(10G)에서 다음과 같은 랭킹쿼리를 작성하였습니다.
스스로 짠 쿼리에 만족감을 느끼며 쿼리를 운영환경으로 이관하였더랍니다.
그러나 실제 운영환경(8.0.6)에서는 쿼리가 동작하지 않았습니다. OTL...
분석함수는 8.1.6 부터 적용이 되더군요.
좌절하고 있는 마농군을 위해 8.0 버전용 쿼리를 작성해 주세요.
CREATE TABLE test_rank
AS
SELECT 1 empno, 10 deptno, 100 point FROM dual
UNION ALL SELECT 2, 10, 90 FROM dual
UNION ALL SELECT 3, 10, 80 FROM dual
UNION ALL SELECT 4, 20, 100 FROM dual
UNION ALL SELECT 5, 20, 90 FROM dual
UNION ALL SELECT 6, 20, 80 FROM dual
UNION ALL SELECT 7, 30, 95 FROM dual
UNION ALL SELECT 8, 30, 85 FROM dual
UNION ALL SELECT 9, 30, 95 FROM dual
;
SELECT empno
, deptno
, point
, RANK() OVER(ORDER BY point DESC) rk_all
, RANK() OVER(PARTITION BY deptno ORDER BY point DESC) rk_dept
FROM test_rank
ORDER BY deptno, rk_dept, empno
;
[결과]
EMPNO | DEPTNO | POINT | RK_ALL | RK_DEPT |
1 | 10 | 100 | 1 | 1 |
2 | 10 | 90 | 5 | 2 |
3 | 10 | 80 | 8 | 3 |
4 | 20 | 100 | 1 | 1 |
5 | 20 | 90 | 5 | 2 |
6 | 20 | 80 | 8 | 3 |
7 | 30 | 95 | 3 | 1 |
9 | 30 | 95 | 3 | 1 |
8 | 30 | 85 | 7 | 3 |