MySQL에서 greatest와 least를 이용하여 ranking 구하기...
Posted 2008. 2. 19. 22:00참조 : 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을 구하려고 한다.
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
앞의 쿼리가 더 세련되어 보이긴하지만 내 머리로 구할수 있는건 두번째 쿼리가 아닌가 싶다.
ㅎㅎㅎ 나의 한계다..
'DBMS' 카테고리의 다른 글
having 절의 사용은 언제? (0) | 2008.04.14 |
---|---|
Join에 대해서 알아보자 (0) | 2008.04.11 |
MySQL 실행계획, Explain 정보보는법 (0) | 2008.02.10 |
랜덤키 생성을 좀더 그럴듯하게 보이기.... (0) | 2008.01.29 |
mysql에서 rownum을 이용하여 일련번호 업데이트 하기 (0) | 2008.01.29 |
- Filed under : DBMS