2

これらの列を持つ StudentGrades テーブルがあります。

 StudentID | CourseID | Grade

各コースのトップの学生を見つける必要があります (コース ID とそのコースで取得した成績とともに)。たとえば、学校で合計 3 つのコースが教えられている場合、クエリは次のように返す必要があります。

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 列を含める最良の方法は何ですか? 上記の結果を一時テーブルに保持し、CourseID と Score が一致して正しい列を取得する元の StudentGrades テーブルと結合できることを知っています。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 に答える