【问题标题】:Sql Server: include column that is not part of an aggregate function or Group by clauseSql Server:包含不属于聚合函数或 Group by 子句的列
【发布时间】:2013-02-10 05:18:08
【问题描述】:

我有一个包含以下列的 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?

希望这是有道理的。

谢谢!

【问题讨论】:

    标签: sql sql-server select group-by


    【解决方案1】:

    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
    

    【讨论】:

    • Windowing 是 sql Server 新增的功能吗?
    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2012-12-07
    • 2013-08-31
    • 1970-01-01
    • 2012-04-27
    相关资源
    最近更新 更多