检索在其部门中最少的员工的姓名

时间:2014-09-28 18:49:51

标签: sql oracle

我有两张桌子

EMPLOYEE (Fname, Lname, Ssn, Salary, Dno)

DEPARTMENT (Dname, Dno, Location)

我想列出所有员工在其部门中工作最少的员工的姓名

我想出了这个

select min(E.Salary) from EMPLOYEE E group by E.Dno;

但我如何加入EMPLOYEE表并显示'Fname'和'Lname';

3 个答案:

答案 0 :(得分:2)

使用Analytic函数ROW_NUMBER() OVER( PARTITION BY DNO ORDER BY SALARY) as RN。因此,WHERE RN = 1将为您提供每个部门薪水最低的员工。

请记住,如果有两名员工薪水相同,那么您需要使用DENSE_RANK来避免类似职级。

注意:这个答案适用于Oracle。

答案 1 :(得分:2)

一种简单的方法是检查同一部门中是否存在薪水较低的人;

SELECT e1.* 
FROM employee e1
WHERE NOT EXISTS(
  SELECT 1 FROM employee e2 WHERE e1.dno = e2.dno AND e1.salary > e2.salary
);

An SQLfiddle to test with

答案 2 :(得分:2)

分析函数最好,但这也有效:

select *
  from employee e
 where salary = (select min(x.salary) from employee x where x.dno = e.dno)