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

SQL Server中查询高于部门平均薪资员工时第二条SQL无返回的原因

问题解答

第二种SQL无返回结果的原因

你第二种写法的GROUP BY子句指定了按empid、deptid、salary三个字段分组,由于empid是员工唯一标识,每个分组实际上仅对应单条员工记录。此时分组聚合计算得到的avg(salary),就是当前分组内唯一一条记录的salary值本身。
因此Having salary > avg(salary)等价于判断「薪资大于自身薪资」,这个条件永远不成立,自然不会返回任何结果。

补充说明:第一种写法的逻辑错误

你提到第一种写法可以正确返回结果,实际上该写法不符合你的需求:你需要筛选薪资高于所属部门平均薪资的员工,但第一种写法的子查询计算的是全表所有员工的平均薪资,最终返回的是薪资高于全公司平均的员工,和预期目标不符。

符合需求的正确写法

写法1:窗口函数实现(SQL Server 2008及以上版本支持,性能更优)

SELECT empid, deptid, salary
FROM (
    SELECT 
        empid, 
        deptid, 
        salary,
        AVG(salary) OVER(PARTITION BY deptid) AS dept_avg_salary
    FROM employee
) t
WHERE salary > dept_avg_salary

写法2:关联子查询实现

SELECT e1.empid, e1.deptid, e1.salary
FROM employee e1
WHERE e1.salary > (
    SELECT AVG(salary) 
    FROM employee e2 
    WHERE e2.deptid = e1.deptid
)

内容的提问来源于stack exchange,提问作者SASHI PANDA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:45:04