You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中编写查询获取班级第二高平均绩点

SQL Server查询班级第二高平均绩点实现方案

你当前的SQL语句逻辑存在偏差,混淆了薪资和绩点的筛选条件,也无法适配并列最高绩点的场景,以下是不同场景下的正确实现:

方案1:SQL Server 2012及以上版本 OFFSET FETCH 写法

适合仅需要获取第二高绩点数值的场景:

SELECT DISTINCT average AS second_highest_average
FROM Course
ORDER BY average DESC
-- 跳过排名第一的行,取下1行
OFFSET 1 ROW FETCH NEXT 1 ROW ONLY;

方案2:窗口函数写法(支持返回对应班级名称,适配并列排名)

如果存在多个班级绩点相同且均为第二高的情况,该写法会返回所有符合条件的班级:

SELECT name, average
FROM (
    SELECT 
        name,
        average,
        -- 按绩点倒序排名,相同绩点排名一致,不会跳过排名空位
        DENSE_RANK() OVER(ORDER BY average DESC) AS rank_num
    FROM Course
) AS ranked_course
WHERE rank_num = 2;

方案3:低版本SQL Server兼容写法

适合2012之前不支持OFFSET和窗口函数的版本:

SELECT MAX(average) AS second_highest_average
FROM Course
-- 排除最高绩点后取最大值即为第二高
WHERE average < (SELECT MAX(average) FROM Course);

补充说明

  • 如果所有班级绩点相同,没有第二高绩点,上述查询会返回空,可在外层套ISNULL函数自定义返回默认值
  • 若不需要保留并列结果,可将DENSE_RANK替换为ROW_NUMBER,仅返回1条符合条件的结果

内容的提问来源于stack exchange,提问作者Maysam Razzaghi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:45:00