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

如何基于给定Staff表结构在SQL Server中查询最大值记录?

在SQL Server中查询Staff表的最大值记录

嘿,针对你要在SQL Server里查询Staff表最大值记录的需求,我整理了几种实用的方案,你可以根据具体要找的字段(比如最高工资、最新入职日期)以及是否需要返回并列最大值的所有记录来选择:

场景1:查询最高工资的员工记录

方法1:用TOP 1 + ORDER BY(最简单直接)

如果只需要返回任意一条工资最高的记录,用这个:

SELECT TOP 1 *
FROM Staff
ORDER BY salary DESC;

要是有多个员工工资并列最高,想返回所有符合条件的记录,就加上WITH TIES:

SELECT TOP 1 WITH TIES *
FROM Staff
ORDER BY salary DESC;

方法2:用窗口函数(灵活处理并列/分组场景)

如果需要更精细的控制(比如按分支分组找最高工资,或者明确保留所有并列最大值),可以用RANK()窗口函数:

WITH RankedStaff AS (
    SELECT *,
           -- 按工资降序排名,并列的会得到相同排名
           RANK() OVER (ORDER BY salary DESC) AS SalaryRank
    FROM Staff
)
SELECT *
FROM RankedStaff
WHERE SalaryRank = 1;

如果只需要任意一条最大值记录(即使有并列),可以把RANK()换成ROW_NUMBER(),它会给每个并列记录分配唯一序号,只返回第一条。

方法3:子查询匹配最大值(逻辑直观)

先通过子查询拿到工资的最大值,再筛选出对应记录:

SELECT *
FROM Staff
WHERE salary = (SELECT MAX(salary) FROM Staff);

这个方法逻辑清晰,适合新手理解,而且如果salary字段有索引的话,性能也不错。

场景2:查询最新入职的员工记录

和上面的思路完全一致,只需要把排序/匹配的字段换成staff_joined_date即可:
比如用TOP 1 WITH TIES:

SELECT TOP 1 WITH TIES *
FROM Staff
ORDER BY staff_joined_date DESC;

或者用窗口函数:

WITH RankedStaff AS (
    SELECT *,
           RANK() OVER (ORDER BY staff_joined_date DESC) AS JoinRank
    FROM Staff
)
SELECT *
FROM RankedStaff
WHERE JoinRank = 1;

一些注意事项

  • 如果最大值字段可能包含NULL,MAX()函数会自动忽略NULL值,子查询和窗口函数的方法都能正常工作;ORDER BY时NULL会排在最后,不会影响非NULL最大值的查询。
  • 对于数据量较大的表,建议给需要查询最大值的字段(比如salary、staff_joined_date)创建索引,能大幅提升查询性能。

内容的提问来源于stack exchange,提问作者u_u-de

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:10:07