查询 每个部门 薪水最高的人

数据准备:

create table `emp` (
	`empno` int (11),
	`ename` varchar (30),
	`job` varchar (30),
	`mgp` int (11),
	`hiredate` datetime ,
	`sal` float ,
	`comm` float ,
	`dept_no` int (11)
); 
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7369','张旭','CLERK','7902','1980-12-17 00:00:00','1640',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7499','文德','SALESMAN','7698','2020-02-18 15:41:18','11400','300','30');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7521','吴磊','SALESMAN','7698','1981-02-22 00:00:00','5200','500','30');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7566','远强','MANAGER','7839','1981-04-02 00:00:00','7015',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7654','李超','SALESMAN','7698','1981-09-28 00:00:00','5200','1400','30');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7698','甘坤','MANAGER','7839','1981-05-01 00:00:00','5900',NULL,'30');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7782','江帅','MANAGER','7839','1981-06-09 00:00:00','2470',NULL,'10');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7788','郑军','ANALYST','7566','1987-04-19 00:00:00','3040',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7844','程伟','SALESMAN','7698','1980-12-17 00:00:00','6200',NULL,'30');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7876','李散','CLERK','7788','1981-09-08 00:00:00','2240',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7900','徐家俊','CLERK','7698','1987-05-23 00:00:00','4000',NULL,'30');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7902','余迪','ANALYST','7566','1981-12-03 00:00:00','3040',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7934','凤姐','CLERK','7782','1982-12-03 00:00:00','2620',NULL,'10');
insert into `emp` (`empno`, `ename`, `job`, `mgp`, `hiredate`, `sal`, `comm`, `dept_no`) values('7935','张三','CLERK','7782','1982-12-03 00:00:00','2620',NULL,'10');

  • 错误示例:(ename 默认取每个分组第一条数据内容)
SELECT ename, MAX(sal) AS maxsal,dept_no FROM emp GROUP BY dept_no
  • 方法一:(对mysql8.0无效,每组只能取出一条数据)
SELECT ename, MAX(sal) AS maxsal,dept_no FROM 
(SELECT ename, sal,dept_no FROM emp ORDER BY dept_no DESC) t
GROUP BY dept_no
  • 方法二:(仅对薪水无重复数据有效)
SELECT 
(SELECT ename FROM emp WHERE emp.sal = t.maxsal AND emp.`dept_no` = t.dept_no) AS ename,
t.maxsal,
t.dept_no
FROM
(SELECT MAX(sal) AS maxsal,dept_no FROM emp GROUP BY dept_no) t
  • 方法三
SELECT ename,sal,dept_no FROM emp
WHERE (sal,dept_no) IN 
(SELECT MAX(sal) AS sal,dept_no FROM emp GROUP BY dept_no)
  • 方法四
SELECT emp.*  FROM emp,
(SELECT MAX(sal) AS sal,dept_no FROM emp GROUP BY dept_no)t
WHERE emp.sal = t.sal AND emp.`dept_no` = t.dept_no
  • 方法五
SELECT emp.*  FROM emp
INNER JOIN 
(SELECT MAX(sal) AS sal,dept_no FROM emp GROUP BY dept_no)t
ON emp.sal = t.sal AND emp.`dept_no` = t.dept_no
发布了31 篇原创文章 · 获赞 13 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/my_flash/article/details/104383144