题目链接: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

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

解答

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

  1. ---- oracle ----
  2. /* Write your PL/SQL query statement below */
  3. select b.Name as Department,
  4. t.Name as Employee,
  5. t.Salary as Salary
  6. from Department b
  7. left join
  8. (
  9. select Name,
  10. Salary,
  11. DepartmentId,
  12. rank() over(partition by DepartmentId order by Salary desc) as rank
  13. from Employee
  14. ) t
  15. on t.DepartmentId = b.Id
  16. where t.rank = 1; ---- 791ms

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

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

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

使用 joinin 进行解答。

  1. ---- MySQL ----
  2. select b.name as Department,
  3. a.name as Employee,
  4. Salary
  5. from Employee a
  6. join Department b
  7. on a.DepartmentId = b.Id
  8. where (a.DepartmentId, Salary) in
  9. (
  10. select DepartmentId,
  11. max(Salary) as Salary
  12. from Employee
  13. group by DepartmentId
  14. ); ---- 221ms

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

思考

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

MySQLin 可以2个字段一起。

  1. select xxx
  2. from yyy
  3. 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. 【Java/MySql】使用JDBC访问MySql数据库的Maven工程

    下载链接:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-1.rar pom.xml里写: <p ...

  2. [drf]model设置

    参考 //# 给model添加虚拟字段 class CeleryExampleResult(models.Model): task_id = models.BigIntegerField(defaul ...

  3. PCA人脸识别学习笔记---原理篇

     前言 在PCA人脸识别中我们把一个人脸图片看做一个特征向量,PCA做的事情就是:找到这样一组基向量来表示已有的数据点,不仅仅是将高维度数据变成低维度数据,更能够找到最关键信息. 假设已有数据{xi} ...

  4. 22 Flutter仿京东商城项目 inappbrowser 加载商品详情、保持页面状态、以及实现属性筛选业务逻辑

    加群452892873 下载对应21可文件,运行方法,建好项目,直接替换lib目录,在往pubspec.yaml添加上一下扩展. cupertino_icons: ^0.1.2 flutter_swi ...

  5. [C++]数据结构:线性表之(单)链表

    一 (单)链表 ADT + Status InitList(LinkList &L) 初始化(单)链表 + void printList(LinkList L) 遍历(单)链表 + int L ...

  6. 事理学神器PDCA

    做事情都按PDCA循环来做,基本就是一个靠谱的人. 这个方法论其实也符合架构师的思维中的分治理论.把大事拆分成一件件小事,并把小事做好. Plan Do Check Action

  7. 卸载未能成功安装的mysql时的解决方案

    在win10系统中,首次未能成功安装mysql,于是试图卸载了mysql相关的应用,结果提示有卸载未完成的应用,无法卸载, 在阅读文档之后发现,可以在任务管理器中的详细信息中找到[dllhost.ex ...

  8. The request was rejected because the URL contained a potentially malicious String ";"报错解决

    报错信息 浏览器中看到的报错 错误摘要: The request was rejected because the URL contained a potentially malicious Stri ...

  9. 修改阿里源为Ubuntu 18.04默认的源

    步骤如下: Step1:备份/etc/apt/sources.list sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak Step2:在/ ...

  10. SIFT学习笔记之二 特征提取

    特征提取函数: int _sift_features( IplImage* img, struct feature** feat, int intvls, double sigma, double c ...