如何用Oracle SQL查询STAFF表中各职业薪资最高的员工?
查询各职业薪资最高的员工(Oracle SQL)
针对你的STAFF表,这里提供两种常用的Oracle SQL实现方式,均支持处理同一职业存在多名薪资并列最高员工的场景:
方法一:使用窗口函数(推荐)
窗口函数RANK()可以高效地对每个职业的员工按薪资降序排名,筛选出排名为1的记录即可:
SELECT Staff_ID, First_Name, Last_Name, Occupation, Salary FROM ( SELECT s.*, RANK() OVER (PARTITION BY Occupation ORDER BY Salary DESC) AS salary_rank FROM STAFF s ) ranked_staff WHERE salary_rank = 1;
PARTITION BY Occupation:按职业分组ORDER BY Salary DESC:每组内按薪资降序排列RANK():同薪资的员工会获得相同排名,确保并列最高薪资的员工都被返回
方法二:使用关联子查询
通过子查询获取每个职业的最高薪资,再匹配主表中对应职业且薪资等于该最大值的员工:
SELECT s1.Staff_ID, s1.First_Name, s1.Last_Name, s1.Occupation, s1.Salary FROM STAFF s1 WHERE s1.Salary = ( SELECT MAX(s2.Salary) FROM STAFF s2 WHERE s2.Occupation = s1.Occupation );
两种方法对比
- 窗口函数:执行效率更高,适合数据量较大的场景,逻辑清晰易维护
- 关联子查询:逻辑直观,适合不熟悉窗口函数的开发者
内容的提问来源于stack exchange,提问作者Solomon
相关产品推荐
相关产品推荐

