Leetcode题解之database(二)184. Department Highest Salary

今天要解的是184题:部门最高工资的员工。(昨晚网速太不稳定,Leetcode半天打不开。。。导致延迟了😅

题目链接在这里:👉 184. Department Highest Salary

首先看这题要考察的知识点:👉是多表关联查询中JOIN 和 IN 的使用
(但是看好些文章说不建议使用JOIN关联查询当数据量很大的时候?有大佬出来讲解一下吗?谢谢✍)

再看这题的思路: 要找的是部门最高员工,那么思路如下👇:
先关联两表再设置查询条件:通过分组找到各自“部门”最高工资员工。

下面看参考解法,解法一:

SELECT D.Name AS Department, E.Name AS Employee, Salary
FROM Employee E JOIN Department D ON E.DepartmentId = D.Id
WHERE (E.DepartmentId , Salary) IN (SELECT DepartmentId, MAX(Salary) FROM Employee GROUP BY DepartmentId);

因为这个题的数据量很小,所以用JOIN是OK的。然后因为D(Department)是小表,所以用小表驱动大表,后面查询使用IN来解决。

再来看解法二:

SELECT D.Name AS Department, E.Name AS Employee, E.Salary AS Salary
FROM Department D, Employee E 
WHERE E.DepartmentId=D.Id 
AND E.Salary=(SELECT MAX(Salary) FROM Employee E2 WHERE E2.DepartmentId=D.Id);

这个解法就是使用WHERE条件查询,然后用AND 嵌套子查询来找到各自的最高工资,这里要注意一下:嵌套子查询里面要把Employee生成新的表E2才会有效!

然后比较这两种解法,发现第一种的查询速度更快,所以是更优解
在这里插入图片描述
当然此题还有其他解法,比如用窗口函数但是掌柜发现在本地MySQL运行是可行的,但是在Leetcode上面就不行,暂时没找到怎么回事,有知道的朋友可以告知一下,谢谢😃。

----------------------------------------------------2020.05.18更新--------------------------------------------
今天发现Leetcode 可以用窗口函数 了😂,可能是之前没有更新MySQL版本吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值