-- rank() 함수를 사용

-- 전체적인 순위를 구해줍니다.

오라클을 주로 쓰던 사람의 경우 오라클 분석 함수의 강력함을 알고 있다.

분석 함수의 기능이 막강하고 많은 기능들이 있지만 타 DB에서도 다음과 같은 방법으로 workaround 가 가능 하다.

select 학반, 성적, 이름, rank() over(order by 학반,성적 desc) as 순위
from #tmp
order by 학반, 성적 desc
;

< 결과 >

학반 성적        이름       순위                
---- ----------- ---------- --------------------
A    100         홍길동     1                   
A    80          홍길서     2                   
A    70          홍길북     3                   
A    10          홍길서     4                   
B    100         홍길동     5                   
B    90          홍길남     6                   
 
6 Row(s) affected


-- 다음은 self 조인을 이용하여 자신보다 성적이 좋은 사람이

-- 몇명인지를 count하여 순위를 구하는 방법입니다.

-- 이게 원하는 결과죠? ^^

select a.학반, a.성적, a.이름, 순위 = count(*)
from #tmp a, #tmp b
where a.학반 = b.학반
and a.성적 <= b.성적
group by a.학반, a.성적, a.이름
order by a.학반, a.성적 desc
;

< 결과 >

학반 성적        이름       순위                
---- ----------- ---------- --------------------
A    100         홍길동     1                   
A    80          홍길서     2                   
A    70          홍길북     3                   
A    10          홍길서     4                   
B    100         홍길동     1                   
B    90          홍길남     2                   
 
6 Row(s) affected


신고
top

Write a comment