【LeetCode】資料庫
阿新 • • 發佈:2018-12-10
【題目描述】
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)