2013-01-13 42 views
-1

标识秩我有一个MySQL表所示:取得名次枢轴查询并获取查询

样本数据

 

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 

我需要得到学生的排名在课堂上即使有二个学生是平等的在标记。例如,如果两名学生在600分中得到600分,则表示两人都处于第一位。

我搜索了很多网站,我发现this post这是我需要的,但在这篇文章中,正确的列已经是标记的总和,但在我的表中我需要总和(数字),然后获得学生的排名取决于总分。

这一切,当我提取单身学生的结果。

相同的数据,当我获取所有类的结果时,有两件事情需要。第一排柱枢查询所以我用行科拉姆查询像Excel格式显示结果:

SELECT m.* 
FROM (
    select student_id, branch_id, class_id, numbers, exam_id, date 
     , sum(numbers*(1-abs(sign(subject_id-1)))) as subs1 
     , sum(numbers*(1-abs(sign(subject_id-2)))) as subs2 
     , sum(numbers*(1-abs(sign(subject_id-3)))) as subs3 
     , sum(numbers*(1-abs(sign(subject_id-4)))) as subs4 
     , sum(numbers*(1-abs(sign(subject_id-5)))) as subs5 
     , sum(numbers*(1-abs(sign(subject_id-6)))) as subs6 
    from results 
    GROUP BY student_id, branch_id, class_id, exam_id 
    ) m 
where branch_id = '6' 
and class_id = '1' 
and exam_id = '1' 
and YEAR(date) = '2013' 

需要的结果在类的查询,如:

 

ID  Name  Math  English  Science  Total Percent  Position Rank 

而且我得到了导致此查询精。但排名问题如何获得同一查询中的学生排名?

任何人都可以帮忙吗?

+1

请张贴一些样本数据和所需的结果集。 – Quassnoi

+0

我改变了我的问题顺序,因为MvG先生说你的问题没有解决。 –

回答

1

我的Questin是如何使用SUM(数字)而不是正确的,因为在帖子查询中已经得到正确的答案。

从子查询而不是表中选择。

其次...

我不完全理解你的第二个问题,并没有看到关于第一。请编写单独的帖子来提出单独的问题。

sum(numbers*(1-abs(sign(subject_id-1)))) 

像MySQL评估这样比较布尔运算时为真实的错误和1使用0可以写为sum(numbers*(subject_id = 1))

还有一点需要注意的是:将WHERE的条件移动到子查询m的范围内,效果会更好。

+0

简单地说,我可以通过上面的查询直接得到排名吗? –