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'
我尝试了上面的查询,它给了我准确的结果,但由于性能问题,我无法使用内部查询。
答案 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