mysql pivot查询和排名查询

时间:2013-01-17 10:16:47

标签: mysql pivot rank

我有一个标记表,如:

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

我想通过此question

获得排名

当我获取所有课程结果时,我使用数据透视查询:

SELECT stu_id, sum(numbers) AS total, branch_id, depart_id, class_id,
 SUM( IF( subject_id =1, numbers, 0 ) ) AS MAth,
 SUM( IF( subject_id =2, numbers, 0 ) ) AS Eng,
SUM( IF( subject_id =3, numbers, 0 ) ) AS Science
FROM marksheet where branch_id = 1 AND depart_id = 1
 AND class_id = 1 GROUP BY stu_id ORDER BY total DESC

我想在我的班级查询中获得排名(透视查询)?我想计算第一个位置有多少学生,第二个和第三个位数有多少?

必填数据样本:

ID      Name        Math        English     Science     Total   Percent     Position   Rank

有人帮忙吗?

1 个答案:

答案 0 :(得分:2)

我认为您需要做的是创建第二个表格,其中包含等级边界,例如:

ID    grade    start_boundry    end_boundry
1       A             60            100     

等..

然后在表之间创建连接,然后在Numbers和开始/结束边界之间执行WHERE语句

所以 - >

SELECT grade FROM boundries_table RIGHT JOIN  sudent_table
WHERE boundries_table.start_boundry < student_table.numbers
AND boundries_table.end_boundry > student_table.numbers

我认为如果我的MySQL内存服务应该可以工作,只需将表修改为你需要它运行的方式,它应该适用于你需要的方式。

相关问题