Oracle SQL查询:找出每个部门薪资最高者

需积分: 15 1 下载量 35 浏览量 更新于2024-08-15 收藏 707KB PPT 举报
"这篇资源主要介绍了如何在Oracle数据库中使用SQL进行高级查询,特别是针对每个部门工资最高的人的查询。作者李金峰分享了多个实用的SQL语句示例,涵盖了日期提取、平均工资计算、部门比较以及管理者分布等多个方面。" 在Oracle SQL中,查询每个部门工资最高的人是一个常见的需求。上述描述中给出的查询方法利用了窗口函数`row_number()`。`partition by`语句被用来将数据按照`deptno`(部门编号)进行分组,然后`order by sal desc`根据薪水降序排列。`row_number()`函数在每个分组内为每一行分配一个顺序号,这里选取`rn<3`,即每个部门的前两名高薪员工。例如,部门10的KING和CLARK,部门20的SCOTT和FORD,以及部门30的BLAKE和ALLEN。 除了这个示例,还提到了其他有用的SQL技巧: 1. **从当前时间中抽取年、月、日**:可以使用`extract()`函数,如`extract(year from sysdate)`、`extract(month from sysdate)`和`extract(day from sysdate)`,分别获取系统当前日期的年份、月份和日期。 2. **查询平均工资最低的部门及工资**:通过子查询先计算每个部门的平均工资,再按平均工资升序排序,然后用`rownum=1`选择平均工资最低的部门。例如,部门30的平均工资是1566.66667。 3. **查询大于本部门平均工资的员工**:可以通过嵌套查询来实现,比较员工的工资与所在部门的平均工资。两种写法(将查询平均工资的SQL放在`where`后或`from`后)都能得到相同的结果。 4. **查询各部门管理者的分布情况**:通过`count(distinct(mgr))`统计每个部门中不为空的经理人数,`where mgr is not null`排除无经理的情况,`group by deptno`按部门分组,展示了各部门的管理者数量。 这些示例展示了Oracle SQL的强大功能,包括聚合函数、子查询、窗口函数以及日期处理等,对于理解和操作Oracle数据库的日常任务非常有帮助。通过学习和应用这些知识,可以更高效地管理和分析企业数据。