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

Sql 检索在其部门中收入最少的员工的姓名,sql,oracle,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' 使用analysis函数,ROW_NUMBER()(按DNO划分,按薪资排序)作为RN。

我有两张桌子

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

DEPARTMENT (Dname, Dno, Location)
我想列出他们部门中收入最少的所有员工的姓名

我想到了这个

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

但是我如何将EMPLOYEE表与之联接并显示'Fname'和'Lname'

使用
analysis
函数,
ROW_NUMBER()(按DNO划分,按薪资排序)作为RN
。因此,
其中RN=1
将为您提供每个部门工资最低的员工

请记住,如果有两名员工的工资相同,则需要使用
densite\u-RANK
以避免类似的级别


注意:此答案适用于Oracle。

使用
分析
函数,
行数()覆盖(按DNO顺序划分,按薪资划分)为RN
。因此,
其中RN=1
将为您提供每个部门工资最低的员工

请记住,如果有两名员工的工资相同,则需要使用
densite\u-RANK
以避免类似的级别


注意:这个答案是针对Oracle的。

一个简单的方法是检查同一个部门中没有工资较低的人

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

.

一个简单的方法是检查同一部门中没有工资较低的人

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

.

分析函数将是最好的,但这也会起作用:

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

分析函数最好,但这也会起作用:

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


您是否需要对SQL Server和Oracle都能正常工作的查询?您使用的是Oracle还是SQL Server?如果两名员工在他们的部门拥有最低工资,那么预期的结果是什么?我想要一个可以与Oracle合作的查询。如果两名员工都有最低工资,那么我需要两名员工的姓名。是否需要一个对SQL Server和Oracle都有效的查询?您使用的是Oracle还是SQL Server?如果两名员工在他们的部门拥有最低工资,那么预期的结果是什么?我想要一个可以与Oracle合作的查询。如果两名员工都有最低工资,那么我需要两名员工的姓名。SQL Server至少在2012年及以后也能正常工作。有没有不使用分析函数的方法?@Amey kelkar,有很多方法,但是从性能的角度来看,
分析函数
更好。因为您只扫描表一次。其他方法如图所示无效。@Joachim Isaksson,谢谢你让我知道。我没有在Sql Server上工作过,所以我提出了一个免责声明;-)至少在2012年及以后的版本中,SQL Server应该也能正常工作。有没有不使用分析函数的方法?@Amey kelkar,有很多方法,但从性能角度来看,
分析函数
更好。因为您只扫描表一次。其他方法如图所示无效。@Joachim Isaksson,谢谢你让我知道。我没有在Sql Server上工作过,所以我提出了一个免责声明;-)我每个人都要department@AmeyKellkar这将准确地显示你想要什么;每个部门的员工收入最低。我在我的Oracle上试用了它,是的,它可以根据我的需要提供准确的输出。但你能详细说明一下这是怎么回事吗?谢谢大家!@AmeyKelkar它是一个相关子查询,在employee表的每一行上,子查询将从该特定行的部门的表中查找最低工资金额(子查询每次选择一个新金额),如果当前行的工资与该表中同一部门的最低工资匹配,则返回该行,否则,从性能的角度来看,
分析函数
比子查询方法要好。我希望每个子查询方法都有它department@AmeyKellkar这将准确地显示你想要什么;每个部门的员工收入最低。我在我的Oracle上试用了它,是的,它可以根据我的需要提供准确的输出。但你能详细说明一下这是怎么回事吗?谢谢大家!@AmeyKelkar它是一个相关子查询,在employee表的每一行上,子查询将从该特定行的部门的表中查找最低工资金额(子查询每次选择一个新金额),如果当前行的工资与该表中同一部门的最低工资匹配,则返回该行,否则从
性能
的角度来看,
分析函数
优于子查询方法。