我试图按照学生的身份选择表中学生的等级。 下面的代码将有助于解释我的问题。 表的名称是Student,它的id和标记为列。
SELECT id, marks,
@curRank := IF(@prevVal=marks,@curRank,@studentNumber) AS rank,
@studentNumber := @studentNumber + 1 as studentNumber,
@prevVal:=marks
FROM Student,(SELECT @curRank :=0, @prevVal:=null, @studentNumber:=1 ) r
ORDER BY marks DESC where id='001';
上面的代码可以选择所有学生ID和他们的排名列表而不是where id='001'
,但我想根据其ID选择每个学生的排名。
我已经尝试了上面的代码来解决我的问题,但是无济于事,请帮助一下。这就是当我执行上面的代码而没有where id='001'
id marks rank
002 92 1
003 92 1
001 80 3
我想选择id = 001的标记和等级,如下面的输出
id marks rank
001 80 3
答案 0 :(得分:1)
在子查询中进行排序和排名计算,然后在子查询外进行ID选择 - 如下所示:
select id, marks, rank from
(SELECT id, marks,
@curRank := IF(@prevVal=marks,@curRank,@studentNumber) AS rank,
@studentNumber := @studentNumber + 1 as studentNumber,
@prevVal:=marks
FROM student,(SELECT @curRank :=0, @prevVal:=null, @studentNumber:=1 ) r
ORDER BY marks DESC ) sq
where id='001'
SQLFiddle here。