3

我有一个标记表,例如:

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

我想获得排名我得到了这个问题的答案

此外,当我获取所有类结果时,我使用数据透视查询:

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 姓名 数学 英语 科学 总百分比 位置 排名

有人帮忙吗?

4

1 回答 1

2

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

ID    grade    start_boundry    end_boundry
1       A             60            100     

等等。。

然后在表之间创建一个连接,然后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 内存可用,那应该可以工作,只需将表修改为你需要它运行的方式,它应该可以满足你的需要。

于 2013-01-17T11:24:01.973 回答