考虑我有两个表/列:
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')
这是对的吗?实际上这是一个面试问题。
答案 0 :(得分: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)
如果一个部门中有多个员工拥有最高薪水,它将为部门返回多行
答案 1 :(得分: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。