Q200510-01: 求部门工资最高的员工

问题: 求部门工资最高的员工

Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。

+----+-------+--------+--------------+

| Id | Name  | Salary | DepartmentId |

+----+-------+--------+--------------+

| 1  | Joe   | 70000  | 1            |

| 2  | Henry | 80000  | 2            |

| 3  | Sam   | 60000  | 2            |

| 4  | Max   | 90000  | 1            |

+----+-------+--------+--------------+

Department 表包含公司所有部门的信息。

 

+----+----------+

| Id | Name     |

+----+----------+

| 1  | IT       |

| 2  | Sales    |

 

编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。

 

+------------+----------+--------+

| Department | Employee | Salary |

+------------+----------+--------+

| IT         | Max      | 90000  |

| Sales      | Henry    | 80000  |

+------------+----------+--------+

 

解答:

复制代码
mysql> select d.name as department,b.name as employee,b.salary from (select e.* from employee e inner join
    -> (select max(salary) as max_salary,departmentid from employee group by departmentid) a
    -> on e.salary=a.max_salary and e.departmentid=a.departmentid) b left join department d
    -> on b.departmentid=d.id ;
+------------+----------+--------+
| department | employee | salary |
+------------+----------+--------+
| Sales      | Henry    |  80000 |
| IT         | Max      |  90000 |
+------------+----------+--------+
2 rows in set (0.00 sec)
复制代码

过程:

复制代码
create table employee(
    id int,
    name varchar(20) not null,
    salary int,
    departmentid int not null,
    primary key(id))
    
insert into employee(id,name,salary,departmentid) values ('1','Joe','70000','1');
insert into employee(id,name,salary,departmentid) values ('2','Henry','80000','2');
insert into employee(id,name,salary,departmentid) values ('3','Sam','60000','2');
insert into employee(id,name,salary,departmentid) values ('4','Max','90000','1');
    
create table department(
    id int,
    name varchar(20) not null,
    primary key(id))
    
insert into department(id,name) values('1','IT');
insert into department(id,name) values('2','Sales');

select max(salary) as max_salary,departmentid from employee group by departmentid

select e.* from employee e inner join 
(select max(salary) as max_salary,departmentid from employee group by departmentid) a
on e.salary=a.max_salary and e.departmentid=a.departmentid

select b.id,b.name,b.salary,d.name from (select e.* from employee e inner join 
(select max(salary) as max_salary,departmentid from employee group by departmentid) a
on e.salary=a.max_salary and e.departmentid=a.departmentid) b left join department d
on b.departmentid=d.id 

select d.name as department,b.name as employee,b.salary from (select e.* from employee e inner join 
(select max(salary) as max_salary,departmentid from employee group by departmentid) a
on e.salary=a.max_salary and e.departmentid=a.departmentid) b left join department d
on b.departmentid=d.id 
复制代码

--2020年5月10日 17点22分--

1.       部门工资最高的员工

Employee 表包含所有员工信息,每个员工有其对应的 Id, salary department Id

 

+----+-------+--------+--------------+

| Id | Name  | Salary | DepartmentId |

+----+-------+--------+--------------+

| 1  | Joe   | 70000  | 1            |

| 2  | Henry | 80000  | 2            |

| 3  | Sam   | 60000  | 2            |

| 4  | Max   | 90000  | 1            |

+----+-------+--------+--------------+

Department 表包含公司所有部门的信息。

 

+----+----------+

| Id | Name     |

+----+----------+

| 1  | IT       |

| 2  | Sales    |

 

编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max IT 部门有最高工资,Henry Sales 部门有最高工资。

 

+------------+----------+--------+

| Department | Employee | Salary |

+------------+----------+--------+

| IT         | Max      | 90000  |

| Sales      | Henry    | 80000  |

+------------+----------+--------+

posted @   逆火狂飙  阅读(155)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2018-05-10 从网易云音乐网页版无登陆下载MP3的办法
2018-05-10 放入MP3的文件夹显示一些没用的标题,艺术家,唱片集怎么办?
2018-05-10 【Nodejs】外研社小学英语教材一年级起各年级英语音频下载(全)
2018-05-10 【Nodejs】使用request批量下载MP3,文件数量内容都没问题
2018-05-10 【Nodejs】使用http.request批量下载MP3,发现网络文件大于1000K时下载文件为0K
2018-05-10 403 Forbidden
2018-05-10 【Nodejs】外研社一年级起各年级英语音频下载(缺456年级上)
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示