대충 테이블이 이렇게 되어있다고 하고요
ID 점수
a 3
b 10
c 5
d 5
쿼리를 해서 순위값을 알고 싶거든요. 이런식으로
순위 ID 점수
1 b 10
2 c 5
2 d 5
3 a 3
이런식으로 점수 높은 순으로 소트하면서 같은 점수는 같은 순위로 하면서
순위값을 알고 싶습니다. 제가 DB 초보라서 힘드네요. 급해서 그러는데 고수님들이 Sql 문을 가르쳐 주시면 감사하겠습니다.
아래의 쿼리는 무척 비효율적인 쿼리입니다.
SELECT Ranking+1 AS Ranking, T1.UID, Score
FROM
(
SELECT R1.UID, Count(R1.UID) AS Ranking
FROM Rank R1, Rank R2
WHERE R1.Score < R2.Score
GROUP BY R1.UID
UNION
SELECT UID, 0 AS Ranking
FROM Rank
WHERE Score IN (SELECT Max(Score) FROM Rank)
) AS T1,
Rank
WHERE
T1.UID = Rank.UID
ORDER BY Ranking
위의 쿼리를 MS-SQL에서 실행시키면 결과는
4 a 3 <-- 이것이 맞다고 생각
가 됩니다. 즉 a의 등수가 4등이 되는 것이죠.
사용하시는 DBMS에 맞게 효율적으로 바꿔보세요.
제 생각에는 스토어드 프로시져를 사용하시는 것이 좋을 듯합니다.
select id,점수 from 테이블이름 order by 점수