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

SQL Server分组查询时如何跳过单条记录的MAX函数结果

解决分组查询时排除单条记录分组的问题

刚好碰到过类似的需求,咱们直接说两种实用的解决思路:

方法一:用HAVING子句直接过滤

这是最简洁高效的方式,在分组后直接用HAVING筛选出记录数大于1的分组,再计算最大薪资:

SELECT Name, MAX(salary) AS max_salary
FROM table
GROUP BY Name
HAVING COUNT(*) > 1;

原理很简单:GROUP BY Name先按姓名分组,HAVING COUNT(*) > 1会把分组里只有1条记录的(比如你的def)直接排除,最后只返回符合条件分组的最大薪资,结果就是abc | 10000。

方法二:子查询筛选符合条件的姓名再查询

如果后续需要关联其他表或者做更复杂的过滤,子查询的方式会更灵活:

SELECT t.Name, MAX(t.salary) AS max_salary
FROM table t
WHERE t.Name IN (
    -- 先找出所有有超过1条记录的姓名
    SELECT Name
    FROM table
    GROUP BY Name
    HAVING COUNT(*) > 1
)
GROUP BY t.Name;

先通过子查询拿到所有记录数大于1的姓名列表,外层查询只针对这些姓名分组计算最大薪资,效果和方法一完全一致。

两种方法都能满足你的需求,优先推荐方法一,代码更简洁,执行效率也更高~

内容的提问来源于stack exchange,提问作者NAGARAJA H I

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:30:45