【问题标题】:Rank students depending on their class根据班级对学生进行排名
【发布时间】:2016-07-13 14:25:10
【问题描述】:

我正在尝试根据他们的班级 (exam_place_id) 按我的学生的分数对他们进行排名。

这是我的数据库

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

总排名是他们的总分

我已经完成了总体排名

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 列,但我当前的查询确实选择了。

【问题讨论】:

    标签: mysql sql ranking


    【解决方案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;
    

    【讨论】:

    • 我怎样才能用我收到的值更新我的表?
    • 您可以从原始表连接到此查询。
    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多