使用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)