题目链接:https://leetcode-cn.com/problems/department-highest-salary/

题目

Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。

+----+-------+--------+--------------+

| Id | Name | Salary | DepartmentId |

+----+-------+--------+--------------+

| 1 | Joe | 70000 | 1 |

| 2 | Henry | 80000 | 2 |

| 3 | Sam | 60000 | 2 |

| 4 | Max | 90000 | 1 |

+----+-------+--------+--------------+

Department 表包含公司所有部门的信息。

+----+----------+

| Id | Name |

+----+----------+

| 1 | IT |

| 2 | Sales |

+----+----------+

编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。

+------------+----------+--------+

| Department | Employee | Salary |

+------------+----------+--------+

| IT | Max | 90000 |

| Sales | Henry | 80000 |

+------------+----------+--------+

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/department-highest-salary

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

哈哈,第一次调试调试就通过。

---- oracle ----
/* Write your PL/SQL query statement below */
select b.Name as Department,
t.Name as Employee,
t.Salary as Salary
from Department b
left join
(
select Name,
Salary,
DepartmentId,
rank() over(partition by DepartmentId order by Salary desc) as rank
from Employee
) t
on t.DepartmentId = b.Id
where t.rank = 1; ---- 791ms

通过观察测试样例的通过情况,发现自己代码的问题。

一开始使用 row_number() 进行排序的时候,发现同一个薪水会得到不同的排名,不符合题目的要求,因此改为 rank() 则通过。

第一次不通过的时候,发现测试案例存在 Department 表存在为空的情况,所以把 left join 的2个表交换位置,便可以。

使用 joinin 进行解答。

---- MySQL ----
select b.name as Department,
a.name as Employee,
Salary
from Employee a
join Department b
on a.DepartmentId = b.Id
where (a.DepartmentId, Salary) in
(
select DepartmentId,
max(Salary) as Salary
from Employee
group by DepartmentId
); ---- 221ms

使用 left join 时同样报错,因为有一个样例没通过,改为 join 或者直接使用 inner join 便可以。

思考

一步步思考,思考,思考最重要!

MySQLin 可以2个字段一起。

select xxx
from yyy
where (a, b) in (c, d);

总结来看,还是我一开始使用的 rank() 函数最优美,哈哈!

后续再总结一下 oracle 中4个排序函数的使用情况。

LeetCode:184.部门工资最高的员工的更多相关文章

  1. leetcode 184 部门工资最高的员工

    题目描述:Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. Department 表包含公司所有部门的信息. 编写一个 SQL 查询,找 ...

  2. 184. 部门工资最高的员工 + join + in

    184. 部门工资最高的员工 LeetCode_MySql_184 题目描述 题解分析 1.首先需要使用group by找出工资最高的值 2. 然后考虑到最高工资的可能有多位,所以使用in语句找到所有 ...

  3. sql 184. 部门工资最高的员工

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

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

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

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

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

  6. Q200510-01: 求部门工资最高的员工

    问题: 求部门工资最高的员工 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--------+----- ...

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

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

  8. 如何用分析函数找出EMP表中每个部门工资最高的员工

    EMP表是Oracle测试账户SCOTT中的一张雇员表,首先,我们来看看emp表的数据 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE ...

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

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

随机推荐

  1. ubuntu下如何安装hg(mercurial)?

    答:  sudo apt-get install mercurial

  2. 图像质量评价-NQM和WPSNR

    王保全. 基于混合专家模型的快速图像超分辨率方法研究与实现[D]. 2015. PSNR 和SSIM 在有时候并不能很确切的表示图像质量 标准,该论文中根据一定量的人为的感知评分作为参考,用斯皮尔曼等 ...

  3. <JavaScript>可枚举属性与不可枚举属性

    在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...

  4. ubuntu 命令行以及目录的显示改为英文

    在安装ubuntu的时候原本以为把ubuntu改为中文的好理解一些,最后发现命令行的报错一边中文一边英文确实难受,也不宜于学习,所以想把命令行以及目录的显示都改为英文的,我是这样先把命令行的该为英文的 ...

  5. Hbase shell操作表

    启动hbase shell ./bin/hbase shell 1.创建表,查看表 create 'tableName', 'familykey1','familykey2',.... eg. cre ...

  6. microsoft 官方学习资源

    https://devblogs.microsoft.com/dotnet/  :_NET Blog https://docs.microsoft.com/zh-cn/learn/ :Microsof ...

  7. Idea创建SpringBoot项目整合Hibernate

    然后next 依赖包选择,Web必须 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <pro ...

  8. 【转】【很全很新】C3P0 连接池和 DBUtils 配合事务使用总结

    [转]https://blog.csdn.net/guozhaohui628/article/details/84793028 很久没用原生连接池,最近想写个小功能,结果发现很多地方不太懂,然后网上搜 ...

  9. jackson将json数组转成List、普通数组。

    package com.mkyong; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jacks ...

  10. seaborn可视化

    文章来自https://blog.csdn.net/qq_33120943/article/details/76569756 详细教程可以查看官方额示例:http://seaborn.pydata.o ...