前段时间同事突然甩了一个SQL面试题给我,题目是需要查询每个部门工资最高的前10位员工。想着查每个部门的最高还好,用max语句就可以搞定,这是要取前十。。。。
快速构建了一下思路,查了一下有没有类似的语法可以解决。
思路:
- 查询每个部门工资最高的员工
- 这样的员工取每个部门的前10个
- 按照部门、工资排序
准备数据:
CREATE DATABASE company;
CREATE TABLE `employee`(
`empno` INT(32) NOT NULL AUTO_INCREMENT,
`department` VARCHAR(64),
`salary` DOUBLE(10,2),
PRIMARY KEY(`empno`);
INSERT INTO EMPLOYEE(`department`,`salary`) VALUES
('B',16000.00),('B',19000.00),('A',10000.00),('A',11000.00),('A',12000.00),('B',13000.00),('B',14000.00),('D',24000.00),('D',25000.00),('B',18000.00),
('C',7000.00),('A',13000.00),('A',14000.00),('A',16000.00),('C',5000.00),('A',16000.00),('A',17000.00),('A',18000.00),('A',19000.00),('B',17000.00),
('B',10000.00),('B',11000.00),('B',12000.00),('B',15000.00),('D',26000.00),('D',26000.00),('D',27000.00),('B',15500.00),('B',16000.00),
('D',20000.00),('D',21000.00),('D',25500.00),('C',2000.00),('C',3000.00),('C',4000.00),('D',28000.00),('D',29000.00),('D',30000.00),('C',6000.00),
('C',1000.00),('C',1100.00),('D',22000.00),('D',23000.00),('C',5500.00),('C',6000.00),('C',8000.00),('C',9000.00),('A',15000.00),('A',15500.00);
具体的SQL查询语句:
select
a.department as '部门',
a.id as '员工工号',
a.salary as '薪资'
from employee a where (
select count(1) from employee b
where b.salary > a.salary and a.department = b.department) < 10
order by a.department,a.id
网友评论