1. 程式人生 > >【LeetCode】資料庫

【LeetCode】資料庫

【題目描述】

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  |
+------------+----------+--------+

【題目解答】

首先建表、生成資料

drop table if exists employee;
drop table if exists department;

create table `employee` (
	`id` int(11) not null auto_increment,
	`name` char(20) not null,
	`salary` int(20) not null,
	`departmentid` int(11) not null,
	primary key(`id`)
)engine=innodb charset=utf8;

create table `department` (
	`id` int(11) not null auto_increment,
	`name` char(20) not null,
	primary key(`id`)
)engine=innodb charset=utf8;

insert into employee(name, salary, departmentid) value("joe", 70000, 1),("8enry", 60000, 2),("sam", 60000, 2),("max", 90000, 1);
insert into department(name) value("IT"),("sales");

結果如下

mysql> select d. name as department, e. name as employee, e.salary from departme
nt d, employee e where e.departmentid = d.id and e.salary = ( select max(salary)
 from employee where departmentid = d.id );
+------------+----------+--------+
| department | employee | salary |
+------------+----------+--------+
| sales      | henry    |  80000 |
| IT         | max      |  90000 |
+------------+----------+--------+
2 rows in set (0.00 sec)