技术问询:查询平均薪资高于Finance部门讲师平均薪资的所有部门
问题分析与修正方案
需求:查询所有平均薪资高于Finance部门讲师平均薪资的部门。
原SQL存在的问题
- 无效表关联:
JOIN department ON e.dept_name = e.dept_name这个条件是讲师自身部门字段的自相等,没有建立instructor和department表的有效关联,属于冗余且错误的关联逻辑。 - 逻辑偏离需求:原语句筛选的是单个讲师薪资高于Finance部门平均薪资的记录,但实际需求是要找出整个部门的平均薪资高于Finance部门平均薪资的部门。
正确SQL写法
写法1:仅查询部门名称及对应平均薪资
SELECT dept_name, AVG(salary) AS dept_avg_salary FROM instructor GROUP BY dept_name HAVING AVG(salary) > (SELECT AVG(salary) FROM instructor WHERE dept_name = 'Finance');
写法2:查询部门完整信息(含building、budget)
如果需要展示部门的其他属性,需关联department表:
SELECT d.dept_name, d.building, d.budget, AVG(i.salary) AS dept_avg_salary FROM department d JOIN instructor i ON d.dept_name = i.dept_name GROUP BY d.dept_name, d.building, d.budget HAVING AVG(i.salary) > (SELECT AVG(salary) FROM instructor WHERE dept_name = 'Finance');
逻辑说明
- 子查询
(SELECT AVG(salary) FROM instructor WHERE dept_name = 'Finance')用于计算Finance部门讲师的平均薪资。 - 主查询通过
GROUP BY按部门分组,计算每个部门的讲师平均薪资。 - 使用
HAVING子句筛选出平均薪资高于Finance部门的分组(注意:聚合函数的筛选必须用HAVING,不能用WHERE)。
内容的提问来源于stack exchange,提问作者BlackN Red
相关产品推荐
相关产品推荐

