求部门工资最高的员工

本文介绍了如何使用SQL查询从员工表中找出每个部门薪资最高的员工。提供了三种不同的查询脚本,包括使用子查询和内连接的方法,最终推荐使用脚本a来获取结果。这些查询涉及到了数据库的联接操作、聚合函数以及条件过滤,是数据库管理中的常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、求部门工资最高的员工,要求以列表形式给出查询结果,列字段名分别为:department,employee,salary

①建表语句

#部门表:department
CREATE TABLE department(
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    NAME VARCHAR(10)
)

#员工表:employee
CREATE TABLE employee(
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    NAME VARCHAR(10),
    salary DECIMAL(10,2),
    department_id INT DEFAULT 0
)

②初始化数据脚本

INSERT INTO department VALUES(1,'IT部'),(2,'财务部'),(3,'销售部');

INSERT INTO employee VALUES
(1,'jack',7000,1),
(2,'tom',8000,1),
(3,'joe',8000,1),
(4,'dell',9000,2),
(5,'ken', 10000,2),
(6,'tim',6000,3),
(7,'steven',7000,3);

③查询脚本

脚本a:
SELECT 
  d.name AS department,
  e.name AS employee,
  e.salary AS salary 
FROM
  employee e 
  INNER JOIN department d 
    ON e.department_id = d.id 
WHERE (e.department_id, e.salary) IN 
  (SELECT 
    department_id,
    MAX(salary) 
  FROM
    employee 
  GROUP BY department_id);

脚本b:

SELECT 
  d.name AS department,
  e.name AS employee,
  c.max_salary AS salary 
FROM
  employee AS e 
  INNER JOIN 
    (SELECT 
      department_id,
      MAX(salary) AS max_salary 
    FROM
      employee 
    GROUP BY department_id) AS c 
    ON e.department_id = c.department_id 
    AND e.salary = c.max_salary 
  INNER JOIN department AS d 
    ON e.department_id = d.id; 

脚本c:

SELECT 
  d.name AS department,
  e.name AS employee,
  c.max_salary AS salary 
FROM
  employee AS e,
  department AS d,
  (SELECT 
    department_id,
    MAX(salary) AS max_salary 
  FROM
    employee 
  GROUP BY department_id) AS c 
WHERE e.department_id = c.department_id 
  AND e.salary = c.max_salary 
  AND e.department_id = d.id ;

④执行结果

 

推荐使用脚本a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青春1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值