Oracle经典SQL:查询高于部门平均工资的部门与员工

需积分: 15 1 下载量 24 浏览量 更新于2024-08-15 收藏 707KB PPT 举报
在Oracle数据库中,查询大于部门总平均工资的部门是一个常见的需求,可以通过SQL语句实现复杂的数据分析。这里提供的SQL代码示例展示了如何利用子查询和聚合函数来达到这个目的。 首先,理解SQL语句的结构至关重要。查询的关键在于嵌套子查询的使用。外部查询`select d.*,sum_sal from dept d, (select sum(sal) as sum_sal,deptno from emp group by deptno) e`有两个主要部分:外部表`dept`与内部子查询`e`。子查询通过计算每个部门的员工总薪水(sum_sal)并按部门编号(deptno)分组,得到每个部门的平均薪资。 内部子查询的结果被与外部表`dept`的记录进行匹配,条件是`d.deptno = e.deptno`。这样,只有当部门的平均工资`e.sum_sal`大于该部门所有员工平均薪资的总体平均值时,才会返回满足条件的部门信息。 具体查询语句: ```sql SELECT d.DEPTNO, DNAME, LOC, SUM_SAL FROM dept d, (SELECT SUM(sal) AS SUM_SAL, deptno FROM emp GROUP BY deptno HAVING SUM(sal) > (SELECT AVG(SUM(sal)) FROM emp GROUP BY deptno)) e WHERE d.deptno = e.deptno; ``` 在这个查询中,`HAVING`关键字用于在子查询内部过滤出平均薪资大于总体平均值的部门,而不是在外部查询中使用`WHERE`过滤结果。 此外,文件还提到了其他一些Oracle SQL查询技巧,如: 1. **提取日期信息**:使用`EXTRACT`函数可以从`sysdate`中获取年、月、日等时间信息。 2. **查询平均工资**:可以单独找出平均工资最低的部门,或者通过子查询计算每个员工的薪资与部门平均薪资的比较。 3. **查询特定条件下的员工**:例如查找工资高于部门平均工资的员工,可以分别在`WHERE`子句或`FROM`子句中包含计算平均工资的子查询。 4. **统计管理者分布**:通过`COUNT(DISTINCT(MGR))`计算每个部门中有多少不同的管理者。 这些示例不仅展示了基本的SQL查询语法,还涵盖了数据处理中的逻辑运算和条件筛选,以及如何有效地利用子查询进行高级分析。掌握这些技能对于在实际工作中高效地操作和分析数据至关重要。