참조 : http://blog.naver.com/dbwpsl?Redirect=Log&logNo=60044586388

create atable user_temp(
gubun tinyint(1),
score int(11),
user_id varchar(12)
);

gubun엔 각각 1,2,3 이 들어가고 이 각각의 score 에 따라 Ranking을 구하려고 한다.

select user_id, gubun, score,
   greatest(
      @rank := if(@gubun = gubun and @score = score, @rank, if(@gubun <> gubun, 1, @rank + 1)),
      least(0, @score := score),
      least(0, @gubun  := gubun)) as rank
from user_temp order by gubun desc, score desc

이렇게 하니 1위부터 순위가 매겨진다....

다음은 또다른 쿼리다. 더 간단하지만 실행속도는 좀 느린듯 한다.


SELECT SCORE, USER_ID,
(SELECT COUNT(*) FROM  USER_TEMP WHERE SCORE > A.SCORE) + 1 AS RANK
FROM USER_TEMP A
ORDER BY RANK

앞의 쿼리가 더 세련되어 보이긴하지만 내 머리로 구할수 있는건 두번째 쿼리가 아닌가 싶다.

ㅎㅎㅎ 나의 한계다..