我有一个表'student_marks‘,有两列'student_id’和'mark':
student_id | marks
-------------------
1 | 5
2 | 2
3 | 5
4 | 1
5 | 2我需要计算与分数对应的排名。上表的预期输出为:
student_id | marks | rank
-------------------------
1 | 5 | 1
2 | 2 | 3
3 | 5 | 1
4 | 1 | 5
5 | 2 | 3由于students_id 1和3的两名学生的分数最高为5分,所以他们被排在第1位。对于2分的学生来说,他们的排名是3,因为有两个学生的分数比这些人高。
我们如何编写查询来计算上面所示的排名?
发布于 2012-06-18 03:57:16
这应该是可行的,尽管它使用了大量的变量。
SELECT student_id, mark, rank FROM (
SELECT t.*,
@rownum := @rownum + 1 AS realRank,
@oldRank := IF(mark = @previous,@oldRank,@rownum) AS rank,
@previous := mark
FROM student_marks t,
(SELECT @rownum := 0) r,
(SELECT @previous := 100) g,
(SELECT @oldRank := 0) h
ORDER BY mark DESC
) as t
ORDER BY student_id;https://stackoverflow.com/questions/11072172
复制相似问题