SQL报错排查:如何获取薪资超平均薪资50%的员工及部门经理信息
解决SQL查询中"no such column: emp_id"错误
错误原因
- 你的子查询只返回了
percentage字段,外层查询需要的emp_id、dep_id没在子查询里输出,自然找不到这些列。 - 子查询直接用
AVG(salary)会把整个员工表聚合为一行数据,没法对应到每个员工的薪资做计算。
修正后的SQL写法
写法一(简洁版,直接筛选薪资)
SELECT e.emp_id, d.manager FROM employees e INNER JOIN departments d ON e.dep_id = d.dep_id WHERE e.salary > (SELECT AVG(salary) * 0.5 FROM employees);
直接算出全公司平均薪资的50%,筛选薪资超过这个值的员工,再关联部门表获取经理姓名,逻辑清晰高效。
写法二(保留薪资占比字段)
如果需要保留薪资占平均薪资的百分比字段,可以这么写:
SELECT t.emp_id, d.manager, t.percentage FROM ( SELECT emp_id, dep_id, (salary / (SELECT AVG(salary) FROM employees)) * 100 AS percentage FROM employees ) t INNER JOIN departments d ON t.dep_id = d.dep_id WHERE t.percentage > 50;
子查询里把emp_id、dep_id和计算出的percentage都返回,再和部门表关联筛选符合条件的记录。
内容的提问来源于stack exchange,提问作者Destroyer123
相关产品推荐
相关产品推荐

