力扣184(MySQL)-部门工资最高的员工(中等)
2023-04-18 14:53:47 时间
题目:
表: Employee
表: Department
编写SQL查询以查找每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
查询结果格式如下例所示。
解题思路:
方法一:窗口函数和多表联结
①先将Employee表按部门id分组,然后再按薪资进行降序排序。
②将临时表与department通过部门id连起来,然后再筛选出排名为1的相关数据。
1 # Write your MySQL query statement below 2 SELECT 3 b.name AS Department, 4 a.name AS Employee, 5 salary as Salary 6 FROM 7 ( SELECT 8 name, 9 departmentId, 10 salary, 11 dense_rank ( ) over ( 12 PARTITION BY departmentId ORDER BY salary desc ) AS rnk 13 FROM Employee 14 ) AS a 15 JOIN Department b ON a.departmentid = b.id 16 WHERE 17 a.rnk = 1;
方法二:多表联结和 IN
①先找到每个部门下的最大薪资,以部门id进行分组,作为后续的筛选条件
②将两个表通过部门id进行联结
③最后从联结的表中以第一步查找的结果为条件筛选出符合要求的部门最高的薪资。
小知识:
①窗口函数:dense_rank ( ) over ( PARTITION BY ... ORDER BY ... desc ) :相同的序号一样,下一个不同的连续数字(1,2,2,3...)
其实这里用rank()也可以,相同的序号一样,下一个不同的跳跃。(1,2,2,4...)
②sql中的内连接【交集】:inner join...on ...(简写为join...on...)
③in:可以同时in查询两个字段的不同值。
相关文章
- 两个动态规划的经典问题
- 云原生之旅 - 10)手把手教你安装 Jenkins on Kubernetes
- 云原生之旅 - 6)不能错过的一款 Kubernetes 应用编排管理神器 Kustomize
- centos离线安装mongodb-database-tools
- 软件设计模式白话文系列(七)适配器模式
- 从Random Walk谈到Bacterial foraging optimization algorithm(BFOA),再谈到Ramdom Walk Graph Segmentation图分割算法
- onps栈使用说明(3)——tcp、udp通讯测试
- [C++] - GCC和LLVM对方法 warning: non-void function does not return a value [-Wreturn-type] 的处理差异
- 【Azure 事件中心】开启 Apache Flink 制造者 Producer 示例代码中的日志输出 (连接 Azure Event Hub Kafka 终结点)
- Docker | 发布镜像到镜像仓库
- Docker | dockerfile构建centos镜像,以及CMD和ENTRYPOINT的区别
- Docker | 容器互联互通
- Unity之"诡异"的协程
- 云原生之旅 - 4)基础设施即代码 使用 Terraform 创建 Kubernetes
- 【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
- Linux网络通信(线程池和线程池版本的服务器代码)
- 如何用webgl(three.js)搭建不规则建筑模型,客流量热力图模拟
- 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)
- 软件设计模式白话文系列(六)代理模式
- CH58X/CH57X/V208 Observer(观察者)例程讨论讲解