0

我正在尝试通过学生的 id 在表格中选择学生的等级。下面的代码将有助于解释我的问题。表的名称是 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
4

1 回答 1

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在这里

于 2013-07-30T13:37:33.157 回答