在Oracle SQL中如何查询部门中员工的平均薪金,同时排除掉最高薪金和最低薪金的员工影响?
时间: 2024-11-19 18:26:36 浏览: 0
要解决这个问题,我们可以采用以下步骤进行SQL查询:
参考资源链接:[Oracle SQL实战:经典习题集锦](https://wenku.csdn.net/doc/12j4sjh701?spm=1055.2569.3001.10343)
1. 首先,为每个部门计算出所有员工的平均薪金。
2. 然后,找出每个部门中薪金最高和最低的员工。
3. 最后,排除这些员工后,重新计算部门的平均薪金。
假设部门编号存储在DEPT表的DEPTNO列中,员工的薪金存储在EMP表的SAL列中,可以使用以下的SQL查询实现上述逻辑:
```sql
SELECT
e.DEPTNO,
AVG(e.SAL) AS AVG_SAL
FROM
EMP e
WHERE
e.SAL > (
SELECT MIN(e2.SAL)
FROM EMP e2
WHERE e2.DEPTNO = e.DEPTNO
)
AND e.SAL < (
SELECT MAX(e2.SAL)
FROM EMP e2
WHERE e2.DEPTNO = e.DEPTNO
)
GROUP BY
e.DEPTNO;
```
这个查询通过WHERE子句中的子查询排除了每个部门的最低和最高薪金的员工。子查询找出每个部门的最低薪金和最高薪金,然后主查询在这些值的基础上过滤出其他员工,并计算他们的平均薪金。
如果你希望进一步提高SQL技能,特别是涉及Oracle数据库的操作,我推荐阅读《Oracle SQL实战:经典习题集锦》。这本书不仅能够帮助你理解如何处理这类复杂查询,还能够提供多种实际的习题,涵盖从基础到高级的不同层面的内容。通过实际操作这些习题,你可以加深对Oracle SQL的理解,并提高解决实际问题的能力。
参考资源链接:[Oracle SQL实战:经典习题集锦](https://wenku.csdn.net/doc/12j4sjh701?spm=1055.2569.3001.10343)
阅读全文