MySQL分组排名

MySQL分组排名,mysql,Mysql,我是一名新手,试图对不同班级的学生分数进行排名,我的问题如下: SELECT Branch, Grade, Section, RollNo, FIrst_Name, Father_Name, Grand_Father_Name, AverageMark, rank FROM ( SELECT Branch, Grade, Section, RollNo, FIrst_Name, Father_Name, Grand_Father_Name, AverageMark, @curRank

我是一名新手,试图对不同班级的学生分数进行排名,我的问题如下:

SELECT Branch, Grade, Section, RollNo, FIrst_Name, Father_Name, Grand_Father_Name, AverageMark, rank 
FROM (
    SELECT Branch, Grade, Section, RollNo, FIrst_Name, Father_Name, Grand_Father_Name, AverageMark, @curRank := IF(@prevRank = AverageMark, @curRank, @incRank) AS rank,  @incRank := @incRank + 1,  @prevRank := AverageMark 
    FROM studentsaverage p, 
        ( SELECT @curRank :=0, @prevRank := NULL, @incRank := 1 ) r 
    ORDER BY AverageMark DESC
) s


突出显示的学生排名是4而不是1,因为该学生来自另一所学校,我如何解决这个问题?

我实际上没有什么可以测试我的代码,但您的代码的问题是您没有验证分支是否相同:

SELECT Branch,
       Grade,
       SECTION,
       RollNo,
       FIrst_Name,
       Father_Name,
       Grand_Father_Name,
       AverageMark,
       rank
FROM
    ( SELECT Branch,
             Grade,
             SECTION,
             RollNo,
             FIrst_Name,
             Father_Name,
             Grand_Father_Name,
             AverageMark,
             @curRank := IF(@curBranch = Branch ,IF(@prevRank = AverageMark, @curRank, @incRank),1) AS rank,
             @incRank := @incRank + 1,
             @prevRank := AverageMark,
             @curBranch = Branch
     FROM studentsaverage p,
         (SELECT @curRank :=0, @prevRank := NULL, @incRank := 1, @curBranch := NULL) r
     ORDER BY Branch, AverageMark DESC) s