순위 관련 쿼리 질문입니다. 0 6 831

by arz3390 [2016.05.03 11:34:01]


안녕하세요. 저번에 rank나 분석함수를 사용하지 않고 순위를 구하는 것에 대하여 질문을 드렸는데요.

사용하다보니 dense_rank()함수의 역할을 하는 부분도 필요하게 되어 다시 질문을 드립니다.

dense_rank()를 사용하지 않고 순위에 대한 결과를 얻고 싶습니다.

 

아래와 같이 결과를 얻고싶습니다.

 

stu_no     sco    ranking                              stu_no     sco     ranking

---------------------------                             -----------------------------

  3          100       1                                     3          100         1

  1          100       1                                     1          100         1

  2           95        3                                     2           95         2

  5           80        4                                     5           80         3

  4           60        5                                     4           60          4

by 우리집아찌 [2016.05.03 12:01:05]

WITH T ( STU_NO , SCO )  AS (
SELECT  3, 100  FROM DUAL UNION ALL
SELECT  1, 100  FROM DUAL UNION ALL
SELECT  2, 95   FROM DUAL UNION ALL
SELECT  5, 80   FROM DUAL UNION ALL
SELECT  4, 60   FROM DUAL 
) 
      
SELECT T1.STU_NO , T1.SCO 
     , RANK() OVER(ORDER BY T1.SCO DESC)  RK
     , DENSE_RANK() OVER(ORDER BY T1.SCO DESC) DRK
     , T2.RN 
 FROM  T T1 ,
      (SELECT ROWNUM RN , SCO
         FROM ( SELECT SCO FROM T GROUP BY SCO ORDER BY SCO DESC ) 
      ) T2 
      WHERE T1.SCO(+) = T2.SCO 
ORDER BY T1.SCO DESC

 


by arz3390 [2016.05.03 12:43:00]

rank(), dense_rank(), 등 분석함수를 사용하지 않고 되는 걸 알고 싶은겁니다 ㅠ


by 마농 [2016.05.03 13:18:49]

이 두줄은 단순 참고용인 듯 한데요 ^^

     , RANK() OVER(ORDER BY T1.SCO DESC)  RK
     , DENSE_RANK() OVER(ORDER BY T1.SCO DESC) DRK

by arz3390 [2016.05.03 14:09:31]

제가 잘 몰라서 이해하는데 시간이 오래 걸렸네요 감사합니다.


by 마농 [2016.05.03 13:08:18]
SELECT a.stu_no, a.sco
     , COUNT(DISTINCT b.sco) + 1 dr
  FROM t a
     , t b
 WHERE a.sco < b.sco(+)
 GROUP BY a.stu_no, a.sco
 ORDER BY dr
;

 


by arz3390 [2016.05.03 13:54:29]

감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입