0

我必须编写查询,返回平均工资小于 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 的员工。如何正确编写此查询?提前致谢。

4

4 回答 4

1

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

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;
于 2019-03-19T10:43:50.140 回答
0

你需要子查询:

SELECT e.DEPARTMENT_ID, e.FIRST_NAME, e.LAST_NAME
FROM EMPLOYEES e
WHERE e.DEPARTMENT_ID IN (SELECT e1.DEPARTMENT_ID
                          FROM EMPLOYEES e1
                          GROUP BY e1.DEPARTMENT_ID
                          HAVING AVG(e1.SALARY) < 12000
                         )
ORDER BY e.LAST_NAME ASC;
于 2019-03-19T10:42:20.793 回答
0

您可以使用相关子查询

SELECT e.DEPARTMENT_ID, e.FIRST_NAME, e.LAST_NAME
FROM EMPLOYEES a
WHERE exists (SELECT 1 FROM EMPLOYEES b
                          where a.department_id=b.department_id
                          HAVING AVG(b.SALARY) < 12000
                         );
于 2019-03-19T10:43:57.793 回答
0

试试看..

SELECT e.DEPARTMENT_ID, e.FIRST_NAME, e.LAST_NAME
       from employee e where e.DEPARTMENT_ID in 
                                   (select e.DEPARTMENT_ID from employee e 
                                                  group by e.DEPARTMENT_ID
                                                   having avg(salary)<3000)
于 2019-03-19T11:08:50.627 回答