SQL Server 2019执行UPDATE语句报聚合函数嵌套错误如何解决
错误原因
你遇到的报错是因为SQL Server不支持嵌套聚合函数的写法,你代码里的MAX(COUNT(SURNAME))不符合语法规则:COUNT(SURNAME)已经是分组后的聚合结果,不能直接在外层再套MAX()聚合函数计算最大值。
解决方案
最简写法(推荐)
直接在分组后按部门员工数降序排序,取第一条的部门编号即可,代码如下:
UPDATE EMPLE SET DEPT_NO = ( SELECT TOP 1 DEPT_NO FROM EMPLE WHERE JOB = 'EMPLOYEE' GROUP BY DEPT_NO ORDER BY COUNT(SURNAME) DESC ) WHERE SURNAME = 'SAAVEDRA';
高可读性写法
如果需要更清晰的分层逻辑,或者后续要扩展统计规则,可以用CTE先统计每个部门的员工数,再取值:
-- 先统计每个部门的EMPLOYEE岗位人数 WITH DeptEmployeeCount AS ( SELECT DEPT_NO, COUNT(SURNAME) AS employee_count FROM EMPLE WHERE JOB = 'EMPLOYEE' GROUP BY DEPT_NO ) UPDATE EMPLE SET DEPT_NO = ( SELECT TOP 1 DEPT_NO FROM DeptEmployeeCount ORDER BY employee_count DESC ) WHERE SURNAME = 'SAAVEDRA';
注意事项
如果存在多个部门的EMPLOYEE岗位人数相同且都是最大值的情况,上述写法会随机取其中一个部门。如果需要指定优先级,比如取部门编号最小的,只需要在ORDER BY子句后补充排序规则即可,示例:
ORDER BY employee_count DESC, DEPT_NO ASC
内容的提问来源于stack exchange,提问作者b4tm4n
相关产品推荐
相关产品推荐

