春招打卡d17n34-leetcode刷题184部门工资最高的员工

120 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode刷题184部门工资最高的员工

前文

本文为leetcode数据库类型题目,题目序号184,主要考察数据库查询的知识,题目链接https://leetcode-cn.com/problems/department-highest-salary/

题目信息

表: Employee

+--------------+---------+ | 列名 | 类型 | +--------------+---------+ | id | int | | name | varchar | | salary | int | | departmentId | int | +--------------+---------+ id是此表的主键列。 departmentId是Department表中ID的外键。 此表的每一行都表示员工的ID、姓名和工资。它还包含他们所在部门的ID。  

表: Department

+-------------+---------+ | 列名 | 类型 | +-------------+---------+ | id | int | | name | varchar | +-------------+---------+ id是此表的主键列。 此表的每一行都表示一个部门的ID及其名称。  

编写SQL查询以查找每个部门中薪资最高的员工。

解题思路

根据题目信息可知,本题目想要查询某个部门的最高员工工资。而现在有若干条工资数据,分别关联了一条部门信息。根据这个信息,很容易联想到采用group by关键字。但有一点需要注意,group by关键字只能对一个字段进行聚合处理。而本题目中当对部门信息及工资聚合时,还需要对于员工其他信息关联。因此本题的解答中,在聚合的结果又进行了额外的查询判断。根据员工信息,工资及部门id与聚合的结果做对应即可。以此方式,即可得到该题目的答案。

解题答案

select d.Name as Department, e.Name as Employee, e.Salary from Employee e,Department d where e.DepartmentId=d.id and (e.Salary,e.DepartmentId) in (select max(Salary),DepartmentId from Employee group by DepartmentId);

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。