薪水高于部门平均水平的员工?

Sol*_*oli 3 sql oracle-sqldeveloper

我有一个名为employees的表,其中包含name,department_id和salary.我想找到薪水高于其部门平均水平的员工,并查看他们的姓名,department_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)
Run Code Online (Sandbox Code Playgroud)

我已按照您的说法更新了我的代码:

    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)
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个时,我得到了这个结果:

结果

你可以看到薪水和平均值是相同的,有2个部门80,我需要所有现有部门中的1个.我们如何解决这个问题.我正在使用Oracle数据库,如果这很重要的话.谢谢.

Gor*_*off 8

你的代码非常接近.但是,它不是group by在子查询中,而是需要与外部查询相关联.并且,您不需要外部聚合,只需要一个where子句:

SELECT name, department_id, salary
FROM employees e
WHERE salary > (select avg(salary) from employees e2 where e2.department_id = e.department_id);
Run Code Online (Sandbox Code Playgroud)

但是,您可能正在学习Oracle.您也可以使用分析函数编写此查询:

select e.*
from (select e.*, avg(salary) over (partition by department) as avgsalary
      from employees e
     ) e
where e.salary > e.avgsalary;
Run Code Online (Sandbox Code Playgroud)

虽然这对你所学的内容来说可能有点先进,但我鼓励你理解这两个问题.