我有一个标记表,如:
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
有人帮忙吗?
答案 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内存服务应该可以工作,只需将表修改为你需要它运行的方式,它应该适用于你需要的方式。