Oracle SQL连接查询以找到最高薪水

时间:2018-11-25 18:09:19

标签: oracle join top-n

所以我有两个表薪水和薪金,其定义如下所示

[enter image description here

我正试图创建一个查询,该查询查找绘制最高薪水的员工并显示员工详细信息以及国籍。

我创建了此查询

select empcode,
       max(basic) as "Highest Sal"
 from salary 
    join emp on empcode;

请对此提供帮助

3 个答案:

答案 0 :(得分:2)

您的查询使用简单的汇总max(basic),该汇总会找到最高的薪水。除非您需要加入EMP表以显示其他详细信息。这意味着您不能使用聚合,因为我们需要对非聚合列进行GROUP BY,这会使查询变得毫无意义。

幸运的是,我们可以使用解析函数解决问题。子查询会选择所有相关信息,并按薪水对每个员工进行排名,排名最高的是1。我们在这里使用rank()是因为这样可以处理关系:具有相同basic的两名员工将处于同一等级。

select empcode
           , empname
           , nationality
           , "Highest Sal" 
from (
    select emp.empcode
           , emp.empname
           , emp.nationality
           ,  salary.basic as "Highest Sal" 
           , rank() over (order by salary.basic desc ) as rnk
    from salary join emp on emp.empcode = salary.empcode
)
where rnk = 1;

答案 1 :(得分:1)

  

找到提薪最高的员工

员工在您的数据模型中可以有多个薪水。因此,雇员的(总)工资是这些收入的总和。您想要找到每位员工的最高薪水,并显示收入多少的员工。

您可以使用MAX OVER来找到最大金额:

select e.*, s.total_salary
from emp e
join 
(
  select
    empcode, 
    sum(basic) as total_salary,
    max(sum(basic)) over () as max_total_salary
  from salary
) s on s.empcode = e.empcode and s.total_salary = s.max_total_salary
order by e.empcode;

答案 2 :(得分:0)

尝试一下:

SELECT * FROM 
(SELECT E.EmpCode, E.EmpName, E.DOB, E.DOJ, E.DeptCode, E.DesgCode, E.PhNo, 
E.Qualification, E.Nationality, S.Basic, S.HRA, S.TA, S.UTA, S.OTRate 
FROM EMP AS E JOIN SALARY AS S ON (E.EmpCode = S.EmpCode) order by S.Basic desc) 
WHERE rownum = 1