SQL多表关联查询各部门平均薪资运行报错如何解决
错误原因
- 基础语法错误:
SELECT关键字和后续字段d.dept_name、dm.dept_no和后续FROM关键字之间都没有留空格,SQL解析器无法识别语法,直接报错。 - 子查询逻辑完全不符合需求:子查询使用
GROUP BY salary,是按薪资值分组计算平均薪资,得到的是相同薪资的均值结果,和「按部门统计平均薪资」的需求完全不匹配;且子查询没有返回任何可用于和外层表关联的字段(如emp_no、dept_no),根本无法完成关联操作。 - 关联字段不存在:最后的关联条件写的是
d.emp_no = dm.emp_no,但departments表(别名d)仅存储部门信息,不存在emp_no字段,关联条件无效。 - 结果字段缺失:SELECT查询列表里没有添加平均薪资的输出字段,就算语句能运行也拿不到需要的平均薪资结果。
正确SQL写法
SELECT d.dept_name, dm.dept_no, AVG(s.salary) AS average_salary FROM departments d -- 关联部门经理表拿到部门对应的经理员工编号 JOIN dept_managers dm ON d.dept_no = dm.dept_no -- 关联薪资表拿到所有经理的薪资数据 JOIN salaries s ON dm.emp_no = s.emp_no -- 按部门维度分组统计平均薪资 GROUP BY d.dept_name, dm.dept_no;
注:如果你的实际需求是统计部门所有员工的平均薪资而非仅部门经理的平均薪资,当前提供的三张表缺少员工和部门的关联表
dept_emp,需要补充该表后调整关联逻辑即可。
内容的提问来源于stack exchange,提问作者OKOCHA
相关产品推荐
相关产品推荐

