首页 > 解决方案 > 从平均工资低于的部门中选择员工

问题描述

我必须编写查询,返回平均工资小于 12000 的部门的所有员工。我写下了这个查询

SELECT DEPARTMENT_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID,FIRST_NAME,LAST_NAME
HAVING AVG(SALARY) < 12000
ORDER BY LAST_NAME ASC;

但它似乎不起作用。而不是从这些部门中获取所有员工,而只获取薪水小于 12000 的员工。如何正确编写此查询?提前致谢。

标签: sqloracleoracle11g

解决方案


您需要该部门的平均工资。我会使用窗口函数:

SELECT DEPARTMENT_ID, FIRST_NAME, LAST_NAME
FROM (SELECT e.*, AVG(SALARY) OVER (PARTITION BY DEPARTMENT_ID) as avg_salary_dept 
      FROM EMPLOYEES e
     ) e
WHERE avg_salary_dept < 12000
ORDER BY LAST_NAME ASC;

推荐阅读