我有两张桌子
EMPLOYEE (Fname, Lname, Ssn, Salary, Dno)
DEPARTMENT (Dname, Dno, Location)
我想列出所有员工在其部门中工作最少的员工的姓名
我想出了这个
select min(E.Salary) from EMPLOYEE E group by E.Dno;
但我如何加入EMPLOYEE表并显示'Fname'和'Lname';
答案 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
);
答案 2 :(得分:2)
分析函数最好,但这也有效:
select *
from employee e
where salary = (select min(x.salary) from employee x where x.dno = e.dno)