选择该部门薪资最高的所有部门的所有员工

use*_*490 1 mysql

在其中一次采访中,有人问我下面的问题

"写一个查询,找出所有部门中所有部门名称,员工姓名和工资都有最高工资的员工"

这意味着employee表中有100条记录,department表中有10条记录.因此,它需要从查询中提供10条记录,如果任何部门中没有员工,则仍需要显示该部门名称.

谢谢

Tar*_*ryn 5

如果没有看到表结构,我会说你可以用几种不同的方式做到这一点.

使用IN条款:

select e.name e_name,
  d.name d_name,
  e.salary
from employee e
inner join department d
  on e.deptid = d.id
where e.salary in (select max(salary)
                   from employee
                   group by deptid);
Run Code Online (Sandbox Code Playgroud)

或者使用子查询:

select e1.name e_name,
  d.name d_name,
  e1.salary
from employee e1
inner join
(
  select max(salary) salary, deptid
  from employee
  group by deptid
) e2
  on e1.salary = e2.salary
  and e1.deptid = e2.deptid
inner join department d
  on e1.deptid = d.id
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo of both

现在,MySQL允许您应用聚合函数而不应用于GROUP BY选择列表中的非聚合字段(这不能在sql server,oracle等中完成).所以你可以用来获得相同的结果:

select e.name e_name,
  d.name d_name,
  max(e.salary) salary
from employee e
inner join department d
  on e.deptid = d.id
group by d.name
Run Code Online (Sandbox Code Playgroud)

请参阅SQL小提琴演示