根据班级对学生进行排名

时间:2016-03-25 19:24:09

标签: mysql sql ranking

我试图根据他们的分数(exam_place_id)对他的学生进行排名。

这是我的数据库 enter image description here

例如,exam_place_id 11中具有最高分的学生将被排名为1 exam_place_id 12中的最高点也将排名为

整体排名是他们的整体得分

我按

完成了整体排名
select er.*,
      (@rank := @rank + 1)       as ranking
from examresults er cross join
     (select @rank := 0, @point := -1) params

order by point desc;

然而,当我尝试

select er.*,
      (@rank := @rank + 1)       as ranking
from examresults er cross join
     (select @rank := 0, @point := -1) params
**group by exam_place_id** 
order by point desc;

它不起作用。

注意:我还想用值更新我的class_ranking列,但我当前的查询确实选择了。

1 个答案:

答案 0 :(得分:1)

您需要跟踪考试地点并将其用于排名:

select er.*,
       (@rank := if(@ep = exam_place_id, @rank + 1,
                    if(@ep := exam_place_id, 1, 1) 
                   )
       ) as ranking
from examresults er cross join
     (select @rank := 0, @ep := -1) params
order by exam_place_id,
         point desc;