特定部门员工的最高工资

时间:2016-03-07 01:27:04

标签: sql oracle performance oracle11g

EmpID   EmpName EmpSalary   EmpDept
1       Steve    5000       HR
2       Robert   5000       Management
3       Brad     3000       HR
4       Sam      4000       HR
5       Dave     2000       Management
6       Stuvart  4500       Management

如何从薪水最高且属于人力资源部门的EMPLOYEE表中获取员工详细信息......我的查询是

SELECT EmpID,EmpName,EmpSalary,EmpDept 
FROM EMPLOYEE 
WHERE EmpSalary IN (select max(EmpSalary) from EMPLOYEE) 
AND EMPDEPT='HR'

我尝试了上面的查询,它给了我准确的结果,但由于性能问题,我无法使用内部查询。

5 个答案:

答案 0 :(得分:2)

您可以将order by子句与rownum一起用于Oracle 版本< 12C

SELECT EmpID, EmpName, EmpSalary, EmpDept 
FROM EMPLOYEE 
WHERE ROWNUM = 1 AND EMPDEPT = 'HR'
ORDER BY EmpSalary DESC

否则您可以使用以下内容:

SELECT EmpID, EmpName, EmpSalary, EmpDept 
FROM EMPLOYEE 
WHERE EMPDEPT = 'HR'
ORDER BY EmpSalary DESC
FETCH FIRST ROW WITH TIES

PS: with ties选项让您有机会获得多个结果,以防有多名员工拥有相同的最高薪水(因此产生set可能与使用rownum的那个不同,在结果集中总会有一行。

答案 1 :(得分:1)

SELECT EmpID,EmpName,MAX(EmpSalary),EmpDept
FROM Employee
WHERE EmpDept='HR'
GROUP BY EmpSalary

答案 2 :(得分:0)

这应该可以解决问题。

SELECT Max(EmpSalary)
FROM   employees
WHERE  EmpDept = 'HR';

您希望从EmpSalary列中获取最高工资,因为这是存储工资的地方。那么你想区分你只对人力资源感兴趣。此信息存储在EmpDept中。员工是表的名称,您没有说出您的表名称是什么,在您的情况下可能会有所不同。

答案 3 :(得分:0)

试试吧。希望它会让你平静。

select emp.*
from employee emp
inner join (select EmpDept, max(salary) ms from employee group by EmpDept) m
  on emp.EmpDept = "HR" and emp.salary = m.ms

答案 4 :(得分:0)

在其他答案中未提及的Oracle 11g工作方式(标记您的问题)是analytical max()函数。 它允许查询查看其他行中的值,同时不会丢失当前行的详细信息。人力资源部门是:

select EmpID, EmpName, EmpSalary, EmpDept 
  from (select EmpID, EmpName, EmpSalary, EmpDept, 
               max(EmpSalary) over () as max_sal
          from employee where empdept = 'HR')
  where EmpSalary = max_sal

 EMPID EMPNAME    EMPSALARY EMPDEPT
------ ---------- --------- ----------
     1 Steve           5000 HR

类似的查询显示所有员工在其部门中的工资最高:

select EmpID, EmpName, EmpSalary, EmpDept 
  from (select EmpID, EmpName, EmpSalary, EmpDept, 
               max(EmpSalary) over (partition by EmpDept) as max_sal
          from employee)
  where EmpSalary = max_sal

 EMPID EMPNAME    EMPSALARY EMPDEPT
------ ---------- --------- ----------
     1 Steve           5000 HR
     2 Robert          5000 Management