我有一个名为员工的表,其中有姓名、部门 ID 和薪水。我想找到工资高于所在部门平均工资的员工,并查看他们的姓名、部门id、工资以及所在部门的平均工资。我已经编写了这段代码,但它不起作用。我们该如何解决这个问题?提前致谢。
SELECT name, department_id, salary, avg(salary)
FROM employees
GROUP BY name, department_id, salary
HAVING salary > (select avg(salary) from employees group by department_id)
我已经按照您所说更新了我的代码:
SELECT department_id, salary, avg(salary), count(*)
FROM employees e
GROUP BY department_id, salary
HAVING salary > (select avg(salary) from employees e2 where e2.department_id=e.department_id)
但是当我运行这个时我得到这个结果:
您可以看到工资和平均水平是相同的,并且有 2 个部门 80,我需要所有现有部门中的 1 个。我们该如何解决这个问题。如果有什么重要的话,我正在使用 Oracle 数据库。谢谢。
你的代码非常接近。但是,而不是group by
在子查询中,它需要是相关的到外部查询。而且,您不需要外部聚合,只需要一个where
clause:
SELECT name, department_id, salary
FROM employees e
WHERE salary > (select avg(salary) from employees e2 where e2.department_id = e.department_id);
但是,您可能正在学习 Oracle。您还可以使用分析函数编写此查询:
select e.*
from (select e.*, avg(salary) over (partition by department) as avgsalary
from employees e
) e
where e.salary > e.avgsalary;
尽管这对于您正在学习的内容来说可能有点高级,但我鼓励您理解这两个查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)