1

考虑我有两个表/列:

Employee - > EmpId, DeptNo, EmpName, Salary
Department -> DeptNo, DeptName

编写查询以获取所有部门中薪水最高的员工姓名。我试过这个:

Select max(salary),empname 
from Employee 
where deptno = (select deptno 
                from department
                where deptname in('isd','it','sales')

这是对的吗?其实是面试题。

4

2 回答 2

2

这是groupwise max mysql 模式的一个示例。一种方法是:

    SELECT e.salary, e.name, d.deptname
    FROM Employee AS e 
     JOIN (
       SELECT max(salary) AS max_sal, deptno
       FROM Employee
       GROUP BY deptno
     ) AS d_max ON (e.salary=d_max.max_sal AND e.deptno=d_max.deptno)
     JOIN Department AS d ON (e.deptno = d_max.deptno)

虽然如果一个部门有多个员工的最高工资,它将返回一个部门的多行

于 2012-12-19T15:27:37.537 回答
0

对于这样的问题,我个人会使用 cte 和 row_number 。例如:

with myCTE as
(
    select e.empName, e.salary, d.deptName, 
        row_number() over (partition by e.deptNo order by e.salary desc) as rn
    from Employee as e
    inner join Department as d
        on d.DeptNo=e.DeptNo
)

select m.empName, m.deptName, m.salary
from myCTE as m
where m.rn=1

在关系的情况下(同一部门的两名员工具有相同的最高工资),那么这是不确定的(它只会返回其中一个)。如果您想同时返回它们,请将 row_number 更改为dense_rank。

于 2012-12-19T17:37:25.630 回答