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

例如,exam_place_id 11中得分最高的学生在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列,但是我的当前查询确实是select。
发布于 2016-03-26 03:31:07
你需要跟踪考试地点,并将其用于排名:
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;https://stackoverflow.com/questions/36226569
复制相似问题