SQL简单面试题:查询每个部门工资最高的前10位员工

前段时间同事突然甩了一个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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,854评论 0 11
  • 1. SQL 简介 SQL 的目标 理想情况下,数据库语言应允许用户: 建立数据库和关系结构 完成基本数据管理任务...
    板蓝根plank阅读 2,395评论 0 11
  • 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资? –查询工资最高和最低的工资是多少? –查询公...
    C_cole阅读 7,320评论 0 3
  • 1.基本SQL select语句1.1 sqlplus登陆1.2sqlplus 的基本操作1.3基本select语...
    木鱼_cc阅读 898评论 0 1
  • 在远方 憧憬帮我建起灯塔 指引思绪房向 在尽头 思念为我筑起囚牢 笼罩所有思绪 这间小屋里 只有你
    漫延不止阅读 217评论 1 2