2

我有一个包含以下列的 StudentGrades 表:

 StudentID | CourseID | Grade

我需要为每门课程找到最优秀的学生(以及课程 ID 和您为该课程获得的成绩。例如,如果学校总共教授三门课程,则查询应返回:

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?

希望这是有道理的。

谢谢!

4

1 回答 1

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
于 2013-02-25T05:21:14.290 回答