题目:

表: Employee

表: Department

公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。

编写一个SQL查询,找出每个部门中 收入高的员工 。

以 任意顺序 返回结果表。

查询结果格式如下所示

输出:

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/department-top-three-salaries
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

方法一:窗口函数dense_rank()、内连接join、between...and

①先将employee表按部门号进行分组,按salary进行降序排序。

1 SELECT name, salary, departmentId, dense_rank ( ) over ( PARTITION BY departmentId ORDER BY salary DESC ) AS rnk
2 FROM employee

②再将第一步查询出来的临时表与depatment表通过部门id联结起来,然后筛选出排序数字在1-3的行数据。

 1 SELECT
2 b.name as department,
3 a.name as employee,
4 salary
5 FROM
6 ( SELECT name, salary, departmentId, dense_rank ( )over ( PARTITION BY departmentId ORDER BY salary DESC ) AS rnk
7 FROM employee ) as a
8 JOIN department b
9 ON a.departmentId = b.id
10 WHERE a.rnk between 1 AND 3;
#between and可以替换成 a.rnk <= 3

方法二:先找出前三大的薪水,从e2表里寻找在相同部门中比自身e1表更高的工资值,只需要找比当前工资大0,1,2个的,这样自己排第三就刚好第三高薪资。然后把表 Department 和表 Employee 连接,获得各个部门工资前三高的员工

 1  SELECT
2 department.name AS department,
3 e1.name AS employee,
4 e1.salary AS salary
5 FROM
6 employee e1,department
7 WHERE
8 e1.departmentId = department.id
9 AND (
10 SELECT count( DISTINCT e2.salary )
11 FROM employee e2
12 WHERE e1.salary < e2.salary
13 AND e1.departmentId = e2.departmentId
14 ) < 3
15 ORDER BY
16 department.name,
17 e1.salary DESC;

小知识:

①窗口函数:dense_rank() over(partition by 分组字段 order by 排序字段):排序序号连续:1,2,2,3...

力扣185(MySQL)-部门工资前三高的所有员工(困难)的更多相关文章

  1. 185. 部门工资前三高的所有员工 + 多表联合 + join + dense_rank()

    185. 部门工资前三高的所有员工 LeetCode_MySql_185 题目描述 方法一:使用join on # Write your MySQL query statement below sel ...

  2. 部门工资前三高的所有员工 - LeetCode

    Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId . +----+-------+--------+---- ...

  3. Leetcode的SQL题解:185. 部门工资前三高的员工

    题目 查询部门工资前三高的员工. 我用的数据库是oracle. 下面是数据表的信息. Employee表数据: | ID | NAME | Salary | DepartmentId | | -- | ...

  4. [SQL]LeetCode185. 部门工资前三高的员工 | Department Top Three Salaries

    SQL 架构 Create table If Not Exists Employee (Id ), Salary int, DepartmentId int) Create table If Not ...

  5. sql查询:部门工资前三高的员工和部门工资最高的员工

    创建表:Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);Cr ...

  6. SQL查询每个部门工资前三名的员工信息

    --通用sql select deptno, ename, sal from emp e1 where ( ) from emp e2 where e2.deptno=e1.deptno and e2 ...

  7. mysql查询每个部门/班级前几名

    Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id . +----+-------+--------+--------------+ | I ...

  8. mysql查询之部门工资最高的员工

    最近发现一个网站 力扣 查看 上面有很多算法和数据库的题目,做了一下,发现自己平时都疏忽了,因此边做边记录下来 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 de ...

  9. LeetCode:184.部门工资最高的员工

    题目链接:https://leetcode-cn.com/problems/department-highest-salary/ 题目 Employee 表包含所有员工信息,每个员工有其对应的 Id, ...

  10. [SQL]LeetCode184. 部门工资最高的员工 | Department Highest Salary

    The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...

随机推荐

  1. C++ 字面值的前缀和后缀

    一般字符字面值用前缀,数字字面值用后缀: --C++ Primer第五版2.1.3

  2. 短小精悍的npm入门级保姆教程,一篇包会

    npm是什么? npm是一个强大的包管理工具,它使开发人员能够轻松地安装.更新和管理项目依赖的包.通过初始化一个package.json 文件,我们可以描述你的项目并记录其依赖关系.使用npm ins ...

  3. Linux快速入门(四)Linux用户管理

    root用户和普通用户 虽然root用户的的权限很大,但一般情况下,我们都不会直接使用root用户而是创建一个普通用户,这样可以避免因为权限过大带来的一些误操作,当使用一些需要权限的操作时,可以使用s ...

  4. Linux服务器部署Web版VSCode,在window下使用浏览器在linux环境下编写代码

    最近尝试了一下在Linux服务器上部署VSCode,也就是code-server,然后在windows电脑上通过浏览器访问打开在线编辑器编写代码,以下记录一下部署过程. 1.在linux服务器上安装c ...

  5. KingbaseES 复制冲突之锁类型冲突

    背景 昨天遇到客户现场的一个有关复制冲突的问题 备库报错:ERROR: canceling statement due to conflict with recovery,user was holdi ...

  6. KingbaseES V8R6 集群运维案例 -- 禁止普通用户su到root

    案例说明: 在集群管理中,会使用到root权限(如ip.aring命令等),为安全需要,有的生产环境禁止普通用户su切换到root,本案例测试了禁止普通用户su切换到root对集群管理带来的影响. 集 ...

  7. vector优化

    C++的stdvector使用优化 #include<iostream> #include<vector> using namespace std; class Vectex ...

  8. 一文搞懂Java的工具类和API

    1.工具类(Utility Class) 在Java中,工具类通常包含一系列静态方法,用于执行常见的任务,这些任务可能不直接关联到特定的业务逻辑,而是用于处理一些基础的数据转换.字符串操作.文件操作等 ...

  9. mybatis踩坑之integer类型是0的时候会被认为0!=''是假

    当你的参数类型是integer类型,并且传的是0的时候,在SQL里面做if判断的时候 <if test="auditStatus != null and auditStatus != ...

  10. MySQL配置和常用命令

    目录 数据库配置 常用操作 项目地址:https://github.com/aijisjtu/Bot-Battle graph LR A[配置数据源] --> B[建立连接] B --> ...