查询每个部门工资最高的员工 sql

在线运行sql语句

CREATE TABLE dept (
    dno INT PRIMARY KEY AUTO_INCREMENT,
    dname VARCHAR(50) NOT NULL,
    dlocal VARCHAR(100)
);
CREATE TABLE employee (
    eno INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(50) NOT NULL,
    egender CHAR(2),
    deptno INT NOT NULL,
    ejob VARCHAR(50) NOT NULL,
    esalary INT NOT NULL,
    hiredate DATE NOT NULL
);
ALTER TABLE employee AUTO_INCREMENT = 1001;
INSERT INTO dept (dname, dlocal) VALUES ('accounting', '上海');
INSERT INTO dept (dname, dlocal) VALUES ('research', '北京');
INSERT INTO dept (dname, dlocal) VALUES ('sales', '深圳');
INSERT INTO dept (dname, dlocal) VALUES ('operations', '杭州');
INSERT INTO employee (ename, egender, deptno, ejob, esalary, hiredate) VALUES
('smith', 'm', 20, 'clerk', 800, '2015-11-12'),
('allen', 'f', 30, 'salesman', 1600, '2003-05-12'),
('ward', 'm', 30, 'salesman', 1250, '2003-05-12'),
('jones', 'm', 20, 'manager', 2975, '1998-05-18'),
('martin', 'm', 30, 'salesman', 1250, '2001-06-12'),
('blake', 'f', 30, 'manager', 2850, '1997-02-15'),
('clark', 'm', 10, 'manager', 2450, '2002-09-12'),
('scott', 'm', 20, 'analyst', 3000, '2003-05-12'),
('king', 'f', 10, 'president', 5000, '1995-01-01'),
('turner', 'f', 30, 'salesman', 1500, '1997-10-12'),
('adams', 'm', 20, 'clerk', 1100, '1999-07-05'),
('james', 'f', 30, 'clerk', 950, '2008-06-15');

建表
employee结构
在这里插入图片描述

查询每个部门工资最高的员工

  1. 使用子查询
SELECT *
FROM employee e
WHERE e.esalary = (
  SELECT MAX(esalary)
  FROM employee
  WHERE deptno = e.deptno
);

在这里插入图片描述

  1. group by 写法
SELECT e.*
FROM employee e
INNER JOIN (
    SELECT deptno, MAX(esalary) AS max_salary
    FROM employee
    GROUP BY deptno
) max_salaries ON e.deptno = max_salaries.deptno AND e.esalary = max_salaries.max_salary;

在这里插入图片描述

  1. 窗口函数
SELECT eno, ename, egender, deptno, ejob, esalary, hiredate
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY esalary DESC) as rank
    FROM employee
) ranked
WHERE ranked.rank = 1;
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值