본문 바로가기

Oracle/SQL Question

[퀴즈] RANK()함수를 사용하지 않고 순위 구하기

WITH T AS(
SELECT 1 MONEY, 1 NUM FROM DUAL UNION ALL
SELECT 1      , 2     FROM DUAL UNION ALL
SELECT 2      , 3     FROM DUAL UNION ALL
SELECT 2      , 4     FROM DUAL UNION ALL
SELECT 5      , 5     FROM DUAL
)

MONEY가 같으면 같은 랭크에 속하고 그 뒤에 랭크는 그 수만큼 더한 랭크가 나와야 된다. 결과는 다음과 같다.

결과
       NUM      MONEY        RNK
---------- ---------- ----------
         5            5            1
         3            2            2
         4            2            2
         1            1            4
         2            1            4


=>정답 트리플 클릭 
 SELECT A.NUM,
       A.MONEY,
       COUNT(B.MONEY)+1 RNK
FROM
T A,
T B
WHERE A.MONEY < B.MONEY(+)
GROUP BY A.NUM,
                     A.MONEY
ORDER BY A.MONEY DESC