mysql SQL查询,基于一列选取另一列的组

3b6akqbq  于 2023-03-07  发布在  Mysql
关注(0)|答案(2)|浏览(151)

我正在使用一个雇员和信息表,其格式为(Fname,Lname,Ssn,Bdate,Salary,Dno),其中Dno是雇员工作的部门编号
我正在尝试创建一个查询,该查询将返回与薪水最高的人在同一部门工作的雇员的姓名。我知道我需要按Dno分组,但如何根据另一列对组进行排序呢?
我一直在尝试

SELECT Fname, Lname
FROM EMPLOYEES
GROUPBY Dno
HAVING max(salary) in (dno)

我也试过做嵌套选择,但我似乎不能得到正确的排序。我是新的SQL,所以任何建议感谢我理解它可能真的很简单,我只是不能概念化它。

elcex8rz

elcex8rz1#

编写一个子查询,获取工资最高的雇员的部门编号:

SELECT dno
FROM Employees
ORDER BY salary DESC
LIMIT 1

然后,您可以使用它来筛选同一部门中的员工。

SELEECT Fname, Lname
FROM Employees AS e
JOIN (
    SELECT dno
    FROM Employees
    ORDER BY salary DESC
    LIMIT 1
) AS m ON e.dno = m.dno
ugmeyewa

ugmeyewa2#

Barmar的回答解决了问题;但是,如果您想查看每个部门中每个员工的工资排名,另一个解决方案是使用一个公用表函数来计算排名,然后从该结果中选择排名第一的任何员工。

with cte_emp_salaries as
(
select 
  fname, 
  lname, 
  salary,
  row_number() over (partition by dno order by salary desc) as salary_rank
from employees
)
select * from cte_emp_salaries where salary_rank = 1

你可以去掉where子句,查看公司按雇员、部门和工资的整体排名。

相关问题