Mysql使用过滤器获得排名

Mysql使用过滤器获得排名,mysql,select,group-by,ranking,Mysql,Select,Group By,Ranking,我有一个标记表,如: ID STUDENT_ID Branch_id Class_id Exam_id Subject_id Numbers Date 1 653 5 1 1 8 60 2012-01-01 2 653 5 1 1 9 40 2012-01

我有一个标记表,如:

ID STUDENT_ID Branch_id Class_id Exam_id Subject_id Numbers Date 1 653 5 1 1 8 60 2012-01-01 2 653 5 1 1 9 40 2012-01-01 3 653 5 1 1 10 80 2012-01-01 4 653 5 1 1 11 50 2012-01-01 5 653 5 1 1 12 65 2012-01-01 6 653 5 1 1 13 33 2012-01-01 7 653 5 1 1 15 86 2012-01-01 8 222 5 1 1 8 100 2012-01-01 9 222 5 1 1 9 80 2012-01-01 10 222 5 1 1 10 92 2012-01-01 11 222 5 1 1 11 50 2012-01-01 12 222 5 1 1 12 65 2012-01-01 13 222 5 1 1 13 33 2012-01-01 7 222 5 1 1 15 86 2012-01-01 ID学生ID分支机构ID班级ID考试ID科目ID编号日期 1 653 5 1 1 8 60 2012-01-01 2 653 5 1 1 9 40 2012-01-01 3 653 5 1 1 10 80 2012-01-01 4 653 5 1 1 11 50 2012-01-01 5 653 5 1 1 12 65 2012-01-01 6 653 5 1 1 13 33 2012-01-01 7 653 5 1 1 15 86 2012-01-01 8 222 5 1 1 8 100 2012-01-01 9 222 5 1 1 9 80 2012-01-01 10 222 5 1 1 10 92 2012-01-01 11 222 5 1 1 11 50 2012-01-01 12 222 5 1 1 12 65 2012-01-01 13 222 5 1 1 13 33 2012-01-01 7 222 5 1 1 15 86 2012-01-01 如果一个或多个学生的级别相等,我需要知道学生的级别。并使用branc和类id进行筛选

有人能帮我吗

select sum(Numbers),STUDENT_ID,Branch_id,  Class_id
from marksheet 
where Branch_id='value' and Class_id='valueClass'
group by STUDENT_ID,Branch_id,  Class_id
order by sum(Numbers) desc
小提琴演示

试试这个:

SELECT STUDENT_ID, Numbers, IF(@marks=(@marks:=Numbers), @auto, @auto:=@auto+1) rank 
FROM (SELECT STUDENT_ID, Branch_id, Class_id, SUM(Numbers) Numbers
      FROM quiz_user 
      GROUP BY STUDENT_ID 
      ORDER BY Numbers DESC, STUDENT_ID 
     ) AS A, (SELECT @auto:=0, @marks:=0) AS B
WHERE Branch_id = 5 AND Class_id = 1; 

“如果一个或多个学生的级别相等”是什么意思?你说的等级是指身份证吗?还是按“数字”列排序?你们只想在两个学生的分数相等时得到一个结果吗?是的,我想知道两个学生的分数相等时的结果。如果两名学生在总共600分中得到600分,这意味着他们都在第一位。这个位置取决于数字列的和。@zia这个查询有什么问题吗???然后你可以对此发表评论,而不是编辑我的答案。因为其他用户可能会与答案混淆OK抱歉编辑,但当两名学生分数相等时,我没有得到答案。@zia-我已修改了fiidle答案-请在此处检查。。。根据这一点,它工作正常。如果不是,你期望什么样的输出呢?先生,你的例子很好,但是你可以在第二行看到ID#222,当我在类中分配一个等级时,它将是第二位的(比如当进入while循环并按$I分配等级或其他什么)但这是错误的,因为ID#222也在第一位。@Zia:您能用您特定示例所需的输出更新您的问题吗?