查询显示各部门工资最低的员工

Posted

技术标签:

【中文标题】查询显示各部门工资最低的员工【英文标题】:Query to display employees with lowest salary from each department 【发布时间】:2021-07-24 13:42:54 【问题描述】:

我想使用min() 显示基于salary 的每个部门收入最低的员工。

我有id, first name, last name, department id, salary 的员工表 和部门,department_id, name 部门 ID 从 1 到 5。

我在做这件事时遇到了麻烦,我只知道如何开始 SELECT name, surname from employees WHERE...

【问题讨论】:

【参考方案1】:

使用rank()over() 排名窗口功能,您可以根据需要对组内的行进行排名。在这里,我们从一个部门的最低工资开始对所有员工进行排名。现在,如果我们选择 rn =1 的行,那么它将从工资最低的部门中选择员工。

然后将结果与部门表连接起来以获取名称

With lowestEarningEmployees as
(
    id, first_name, last_name, department_id, salary, rank()over(partition by department_id order by salary)rn from employees 
)
select le.id, le.first_name, le.last_name, le.department_id,d.name, le.salary, 
from lowestEarningEmployees le inner join departments d on le.department_id=d.department_id

** 如果一个部门中不止一名员工的薪水最低,所有员工都将被选中。如果您只想选择一名薪水最低的员工,则需要使用row_number() 而不是rank()

您也可以使用子查询来获得您想要的结果(虽然我建议使用第一个):

Select e.id, e.first_name, e.last_name, e.department_id, d.name, e.salary 
from employees e inner join department d on e.department_id = d.department_id
where e.salary=(select min(salary) from employees empl where e.department_id=empl.department_id)

【讨论】:

【参考方案2】:

您可以为此使用min()。您将使用窗口函数:

select e.*
from (select e.*,
             rank() over (partition by department_id order by salary) as seqnum
      from employees e
     ) e
where seqnum = 1
order by department_id;

【讨论】:

谢谢,这项工作,但有没有办法只用 Select/Where/Group by 以更简单的方式编写这个?我是初学者,不了解分区/序列号。 @Stackerh 。 . .有替代方法,但我不会称它们中的任何一个“更简单”。

以上是关于查询显示各部门工资最低的员工的主要内容,如果未能解决你的问题,请参考以下文章

SQL练习——查询部门工资最高的员工

查询各部门中高于部门平均工资的人员,人数及该部门的平均工资

oracle---plsql---示例laobai

sql

MySQL 实战

如何用oracle查询出部门名称,部门员工数,部门平均工资,部门最低工资雇员的姓名,及工资等级