在mysql中获取id by Rank

时间:2013-07-30 12:58:31

标签: mysql

我试图按照学生的身份选择表中学生的等级。 下面的代码将有助于解释我的问题。 表的名称是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

1 个答案:

答案 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