1

我从最大列中获取行时遇到问题,这里是插图:http ://sqlfiddle.com/#!3/15207/9

基本上我想获得学生的最高成绩以及成绩ID(gid)。但查询不正确,因为使用将返回 2 的最大等级 id。

第一门课,学生得了 D(1 分)。第二次参加课程,学生获得 E(0 分)。

该 1 点的 Gradeid 为 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 回答