I agree with Orange. The Results table is not normalized. Any analysis of the grades data will be difficult. The referenced link would be relevant for normalized data. Otherwise, a custom function could be used to determine the rankings you describe for each record.
Here is example of a function I use to determine the average of a set of values from single record (not all my data is normalized):
Code:
Function RAvg(ParamArray FieldValues()) As Variant
'----------------------------------------------------
' Function RAvg() averages all numeric arguments passed to it.
' If none of the arguments are numeric, it returns null.
' http://support.microsoft.com/kb/209839
'-----------------------------------------------------
Dim dblTotal As Double
Dim lngCount As Long
Dim varArg As Variant
For Each varArg In FieldValues
If IsNumeric(varArg) Then
dblTotal = dblTotal + varArg
lngCount = lngCount + 1
End If
Next
If lngCount > 0 Then
RAvg = dblTotal / lngCount
Else
RAvg = Null
End If
End Function
Here is example of calling the function in a textbox:
=RAvg([tbxSPG1],[tbxSPG2],[tbxSPG3])
Another alternative is to use a UNION query to rearrange the data into a normalized structure then use that query as a source for the TOP N query demonstrated in Allen Browne article.