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
相关产品推荐
相关产品推荐

