获取排名查询中的数据库查询和获取ID排名

时间:2013-01-13 19:36:47

标签: php mysql pivot rank

我有一个像以下的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格式显示结果,因此我使用row to colum查询,如:

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 个答案:

答案 0 :(得分:1)

  

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

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

  

第二......

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

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

你可以把它写成sum(numbers*(subject_id = 1)),因为在评估像这种比较的布尔运算时,MySQL使用0表示false,1表示true表示。

还有一点需要注意:在性能方面,将WHERE条件移到子查询m中会更好。