sql练习:部门工资最高的员工

发布时间 2023-11-20 10:27:00作者: 安琪儿一直在

题目:

表: Employee

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

 

表: Department

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

 

查找出每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
查询结果格式如下例所示。

 

示例 1:

输入:
Employee 表:
+----+-------+--------+--------------+
| id | name  | salary | departmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+
Department 表:
+----+-------+
| id | name  |
+----+-------+
| 1  | IT    |
| 2  | Sales |
+----+-------+
输出:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
| IT         | Max      | 90000  |
+------------+----------+--------+
解释:Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。


解答:

l 写法一:

select Department.name  as Department , Employee.name  as Employee , Employee.salary as Salary 

from  Employee JOIN Department ON Employee.departmentId= Department.Id

where (Employee.departmentId ,Salary) IN

    (select departmentId ,MAX(salary)

     from Employee

     group by departmentId);

 

l 写法二:

SELECT

    Department.NAME AS Department,

    Employee.NAME AS Employee,

    Salary 

FROM

    Employee,

    Department 

WHERE

    Employee.DepartmentId = Department.Id 

    AND ( Employee.DepartmentId, Salary ) 

    IN (SELECT DepartmentId, max( Salary ) 

        FROM Employee 

        GROUP BY DepartmentId )