我试图根据他们的分数(exam_place_id)对他的学生进行排名。
例如,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列,但我当前的查询确实选择了。
答案 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;