今天在做一个学校的学生成绩管理的时候,涉及到对学生的成绩进行排名的问题
主要的难点有两处:
1. 对不同考试项目进行分组,
2. 对同一组内的成绩并列的要做处理,
举个栗子:比如有两门考试
三年级上学期语文100,100,90,80,70,60,50,0和
三年级下学期数学100,100,99,98,98,98,97,97
正确的结果应该是
三年级上学期语文1,1,3,4,5,6,7,8
三年级下学期数学1,1,3,4,4,4,7,7
代码如下:
# 成绩排名表,所有科目,所有考试,所学学号,所有成绩
drop TABLE if exists score_rank;
CREATE TABLE score_rank
SELECT id as stuid,score,rank,score_id2 as score_id
FROM (SELECT tmp.id, tmp.score,
@incRank := IF(@Grp = score_id,@incRank + 1,1),
@curRank := IF(@Grp = score_id and @prevRank = score, @curRank, @incRank) AS rank,
@prevRank := IF(@Grp = score_id,score,100),
@Grp:=score_id as score_id2