Here's my problem:
If a student gets a score of 49 and below in any subject, he won't be included in the ranking.
Those students who will get above 49 in all subjects shall be rank according to their average
And if the students get an equal average, their ranks shall be equal.
Here is my sample:
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
And here is my query:
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 based on query:
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
Can someone help me how to fix this, the output skipped the 2nd rank
Note: Rank
values are not stored in the table.