关于编写SQL查询的问题

时间:2012-12-19 15:02:56

标签: mysql sql

考虑我有两个表/列:

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')

这是对的吗?实际上这是一个面试问题。

2 个答案:

答案 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。