1

最大列から行を取得する際に問題があります

基本的には、学年ID(gid)とともに学生の最高学年を取得したいと考えています。しかし、2 を返す max grade id を使用しているため、クエリは正しくありません。

最初に受講したコースで、学生は D (1 点) を取得しました。2 回目の受講で E(0 点)を得た。

その 1 ポイントのグレード ID は 1 です。

クエリの結果は、1 (userid)、1 (subjectid)、1 (gradeid)、1 (score) になると思います。

ありがとう

更新 01:

より改善された例: http://sqlfiddle.com/#!3/97997/2

4

1 に答える 1

3

更新 1

WITH highestScore
AS
(
    SELECT  a.uid StudentID,
            a.uname StudentName,
            b.Score, 
            c.cname CourseName,
            c.semester,
            d.sname SubjectName, d.sid, 
            DENSE_RANK() OVER (PARTITION BY a.uid, d.sid
                               ORDER BY b.Score DESC) rn
    FROM    Users a
            INNER JOIN Grades b
                ON a.uid = b.uid
            INNER JOIN Courses c
                ON b.cid = c.cid
            INNER JOIN Subjects d
                ON c.sid = d.sid
)
SELECT  StudentID, StudentName, CourseName, semester,
        SubjectName, Score
FROM    highestScore
WHERE   StudentID = 1 AND  -- StudentID
        sid = 1 AND        -- SubjectID
        RN = 1             -- leave this as is (rank of the highest score)
于 2013-03-28T10:42:14.927 に答える