我有一个包含以下列的StudentGrades表:
StudentID | CourseID | Grade
我需要为每门课程找到最优秀的学生(以及课程编号和课程的成绩。例如,如果学校总共有三门课程,则应该返回查询:
1111 3 93
2334 4 90
4343 6 100
这是我到目前为止所拥有的。以下查询
select CourseID, MAX(Grade) Grade
from StudentGrades group by CourseID;
制作:
3 83
4 90
6 100
包含studentID列的最佳方法是什么?我知道我可以在临时表中保存上述结果并加入原始StudentGrades表,其中CourseID和Score匹配得到正确的列。是否有其他方式或更好的方式来包含StudentID?
希望这是有道理的。
谢谢!
答案 0 :(得分:3)
SQL Server
具有窗口函数功能。
WITH gradeList
AS
(
SELECT StudentID,
CourseID,
Grade,
DENSE_RANK() OVER (PARTITION BY CourseID
ORDER BY Grade DESC) RN
FROM tableName
)
SELECT StudentID,
CourseID,
Grade
FROM gradeList
WHERE rn = 1