所以我有两个表薪水和薪金,其定义如下所示
[
我正试图创建一个查询,该查询查找绘制最高薪水的员工并显示员工详细信息以及国籍。
我创建了此查询
select empcode,
max(basic) as "Highest Sal"
from salary
join emp on empcode;
请对此提供帮助
答案 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