这是我的问题:
如果学生在任何科目中得分为49分及以下,他将不会被列入排名。
所有科目达到49分以上的学生应按其平均成绩排名
如果学生得到相同的平均分,他们的等级应该相等。
这是我的样本:
Table1
Student_ID Name Math English Science Average
1 Apple 64 49 70 61.00
2 Boy 80 79 65 74.67
3 Cat 51 78 66 65.00
4 Dove 50 76 64 63.33
5 Eden 81 88 72 80.33
6 Fox 80 79 65 74.67
7 Golf 32 88 69 63.00
Output
Student_ID Name Math English Science Average RANK
1 Apple 64 49 70 61.00
2 Boy 80 79 65 74.67 2
3 Cat 51 78 66 65.00 3
4 Dove 50 76 64 63.33 4
5 Eden 81 88 72 80.33 1
6 Fox 80 79 65 74.67 2
7 Golf 32 88 69 63.00
这是我的疑问:
SELECT
tmain.Student_ID,
tmain.Name,
tmain.Math,
tmain.English,
tmain.Science,
tmain.Average,
IIf(sub.RANK=0, Null, sub.RANK) AS RANK
FROM
Table1 AS tmain
LEFT JOIN
(
SELECT
t1.Student_ID,
t1.Average,
(
SELECT Count(*)
FROM Table1 AS t2
WHERE
t2.Math>49
AND t2.English>49
AND t2.Science>49
AND t2.Average>=t1.Average
) AS RANK
FROM Table1 AS t1
WHERE
t1.Math>49
AND t1.English>49
AND t1.Science>49
) AS sub
ON tmain.Student_ID = sub.Student_ID;
基于查询的输出:
Output
Student_ID Name Math English Science Average RANK
1 Apple 64 49 70 61.00
2 Boy 80 79 65 74.67 3
3 Cat 51 78 66 65.00 4
4 Dove 50 76 64 63.33 5
5 Eden 81 88 72 80.33 1
6 Fox 80 79 65 74.67 3
7 Golf 32 88 69 63.00
有人可以帮我解决这个问题吗,输出跳过第二等级
注意:Rank
值不存储在表格中。
答案 0 :(得分:0)
除非我误解你,否则这将完全满足你的需要:
SELECT tblStudents.StudentID,
tblStudents.SName,
tblStudents.Math,
tblStudents.English,
tblStudents.Science,
tblStudents.AvgScore,
tblStudents.Rank
FROM tblStudents
WHERE
(((tblStudents.Math)>49) AND
((tblStudents.English)>49) AND
((tblStudents.Science)>49))
ORDER BY tblStudents.AvgScore DESC;