LeetCode:184.部门工资最高的员工
题目链接: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个表交换位置,便可以。
使用 join
和 in
进行解答。
---- 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
便可以。
思考
一步步思考,思考,思考最重要!
MySQL
中 in
可以2个字段一起。
select xxx
from yyy
where (a, b) in (c, d);
总结来看,还是我一开始使用的 rank()
函数最优美,哈哈!
后续再总结一下 oracle
中4个排序函数的使用情况。
LeetCode:184.部门工资最高的员工的更多相关文章
- leetcode 184 部门工资最高的员工
题目描述:Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. Department 表包含公司所有部门的信息. 编写一个 SQL 查询,找 ...
- 184. 部门工资最高的员工 + join + in
184. 部门工资最高的员工 LeetCode_MySql_184 题目描述 题解分析 1.首先需要使用group by找出工资最高的值 2. 然后考虑到最高工资的可能有多位,所以使用in语句找到所有 ...
- sql 184. 部门工资最高的员工
Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--------+--------------+| Id ...
- [SQL]LeetCode184. 部门工资最高的员工 | Department Highest Salary
The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...
- mysql查询之部门工资最高的员工
最近发现一个网站 力扣 查看 上面有很多算法和数据库的题目,做了一下,发现自己平时都疏忽了,因此边做边记录下来 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 de ...
- Q200510-01: 求部门工资最高的员工
问题: 求部门工资最高的员工 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--------+----- ...
- sql查询:部门工资前三高的员工和部门工资最高的员工
创建表:Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);Cr ...
- 如何用分析函数找出EMP表中每个部门工资最高的员工
EMP表是Oracle测试账户SCOTT中的一张雇员表,首先,我们来看看emp表的数据 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE ...
- 部门工资前三高的所有员工 - LeetCode
Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId . +----+-------+--------+---- ...
随机推荐
- [maven]idea+maven的多项目依赖
如下两个项目: test-main test-utils 其中test-main需要引用test-utils. 最终效果如下: 实现步骤: 1:新建一个Empty Project作为框架项目 输入框架 ...
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_02-自定义查询页面-服务端-接口开发
在Service中实现自定义查询 StringUtils.isNotEmpty()是这个包下的org.apache.commons.lang3.StringUtils; 再设置其他的条件 定义Exam ...
- JAVA 基础编程练习题22 【程序 22 递归求阶乘】
22 [程序 22 递归求阶乘] 题目:利用递归方法求 5!. 程序分析:递归公式:fn=fn_1*4! package cskaoyan; public class cskaoyan22 { @or ...
- 同一个电脑配置两个github账号
mac中.ssh文件夹在根目录下,所以表示成 ~/.ssh/. 一.同一个电脑配置两个github账号1.分别为两个GitHub账号生成SSH密钥 $ cd ~/.ssh $ ssh-keygen - ...
- 【ARTS】01_27_左耳听风-201900513~201900519
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- flask的jinja2过滤器使用:遍历索引指定标签class属性,实现样式变化
在flask项目中实现上图效果,采用使用自定义过滤器的形式对 span 标签的 class 指定. 1.定义过滤器 # common.py def do_index_class(index): &qu ...
- MapReduce程序的开发过程
1. 在linux(虚拟机环境)下安装hadoop2.8.3 1.1 安装JDK环境 1.2 安装hadoop 1.3 进行配置:core-site.xml,hdfs-site.xml设置 1.4 初 ...
- Sping POJO中如何添加验证规则和验证消息提示
1.示例,验证规则和错误提示作为注解写在声明变量的地方 @NotNull private long id; @NotNull @Size(min = 2, max = 30,message=" ...
- 47.前端css学习、登陆页面的制作
CSS: 有了CSS,html中大部分表现样式的标签就可以不用了 html只负责文档的结构和内容,表现形式完全交给CSS,html文档变得更加简洁 CSS的引入方式: 内联式引入:直接赋予标签styl ...
- WebForm——浅拷贝与深拷贝
注:本文整理来自连接 https://www.cnblogs.com/echolun/p/7889848.html ,感谢博主的分享 总结: 1.浅拷贝:只拷贝变量的名,而不拷贝变量的值——常为引用类 ...