【问题标题】:SQL Get rows based on max columnSQL 根据最大​​列获取行
【发布时间】:2013-03-18 18:14:15
【问题描述】:

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

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

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

该 1 分的等级 ID 为 1。

我希望查询结果是:1(userid),1(subjectid),1(gradeid),1(score)

谢谢

更新 01:

更完善的例子:http://sqlfiddle.com/#!3/97997/2

【问题讨论】:

    标签: sql sql-server-2008 greatest-n-per-group


    【解决方案1】:

    更新 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)
    

    【讨论】:

    • 在此示例中添加另一条记录时失败 sqlfiddle.com/#!3/97997/2 (预期结果为 1,1,1,1) 抱歉,我没有在前面的示例中添加更多行,因为学生将有许多不同的科目和课程
    • 让我看看例子:D
    • 查看我的更新答案。它使用common table expressionwindow function
    • 查看我的更新答案,或者如果您对 ID 更感兴趣,请参阅此处sqlfiddle.com/#!3/97997/17
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多