SQL第3天:部门工资前三高的所有员工
SQL架构
表: Employee
+--------------+---------+ | Column Name | Type | +--------------+---------+ | id | int | | name | varchar | | salary | int | | departmentId | int | +--------------+---------+ Id是该表的主键列。 departmentId是Department表中ID的外键。 该表的每一行都表示员工的ID、姓名和工资。它还包含了他们部门的ID。
表: Department
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | +-------------+---------+ Id是该表的主键列。 该表的每一行表示部门ID和部门名。
公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。
编写一个SQL查询,找出每个部门中 收入高的员工 。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入: Employee 表: +----+-------+--------+--------------+ | id | name | salary | departmentId | +----+-------+--------+--------------+ | 1 | Joe | 85000 | 1 | | 2 | Henry | 80000 | 2 | | 3 | Sam | 60000 | 2 | | 4 | Max | 90000 | 1 | | 5 | Janet | 69000 | 1 | | 6 | Randy | 85000 | 1 | | 7 | Will | 70000 | 1 | +----+-------+--------+--------------+ Department 表: +----+-------+ | id | name | +----+-------+ | 1 | IT | | 2 | Sales | +----+-------+ 输出: +------------+----------+--------+ | Department | Employee | Salary | +------------+----------+--------+ | IT | Max | 90000 | | IT | Joe | 85000 | | IT | Randy | 85000 | | IT | Will | 70000 | | Sales | Henry | 80000 | | Sales | Sam | 60000 | +------------+----------+--------+ 解释: 在IT部门: - Max的工资最高 - 兰迪和乔都赚取第二高的独特的薪水 - 威尔的薪水是第三高的在销售部: - 亨利的工资最高 - 山姆的薪水第二高 - 没有第三高的工资,因为只有两名员工
解答:
select department,Employee ,Salary
from(
select d.name department,e.name Employee ,e.salary Salary,dense_rank() over(partition by DepartmentId order by Salary desc) rk
from Employee e, Department d where e.departmentId = d.id
) m
where rk <=3;
select d.name Department,e1.name Employee,e1.salary
from employee e1, employee e2, Department d
where e1.departmentid = e2.departmentid and e1.salary <= e2.salary and e1.departmentid = d.id
group by e1.id, e1.name, e1.departmentid
having count(distinct e2.salary) <= 3
select a.Department,a.Employee,a.salary from
(select d.name as Department,e.name as Employee,e.Salary as salary ,dense_rank() over(partition by d.name order by e.salary desc)as rk from Employee as e,Department as d
where e.departmentid=d.id)as a where rk<=3;
SQL第3天:部门工资前三高的所有员工相关推荐
- 2022-12-05:部门工资前三高的所有员工。编写一个SQL查询找出每个部门中收入前三高的员工 。 +------------+----------+--------+ | Department |
2022-12-05:部门工资前三高的所有员工.编写一个SQL查询找出每个部门中收入前三高的员工 . ±-----------±---------±-------+ | Department | Em ...
- 【SQL编写实战】查询部门工资前三高的所有员工
[SQL编写实战]查询部门工资前三高的所有员工 最近看到一个sql 题 描述为: Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 D ...
- 取部门工资前三高的所有员工 -- sql 面试(三)
取部门工资前三高的所有员工 两种思路: 1.对于这种分组内取前几名的问题,可以先group by然后用having count()来筛选,比如这题,找每个部门的工资前三名,那么先在子查询中用Emplo ...
- SQL部门工资前三高的所有员工
LeetCode原题 https://leetcode-cn.com/problems/department-top-three-salaries/ 初始sql DROP TABLE IF EXIST ...
- LeetCode MySQL 185. 部门工资前三高的所有员工(dense_rank)
文章目录 1. 题目 2. 解题 1. 题目 Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId . +--- ...
- 部门工资前三高的所有员工
Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId . Department 表包含公司所有部门的信息. 编写 ...
- mysql 查询部门工资前三高的所有员工,分组查询前几的问题
记一次力扣的刷题经历,题目如下: 表: Employee CREATE TABLE `Employee` (`id` int(10),`name` varchar(10) DEFAULT NULL,` ...
- 学习记录570@MySQL查询部门工资前三高的所有员工
表结构 Create table If Not Exists Employee (id int, name varchar(255), salary int, departmentId int) Cr ...
- 文巾解题 185. 部门工资前三高的所有员工
1 题目描述 2 解题思路 1 先在employee表找到前三工资对应的员工 2 然后和department表联立,将部门的id转换成字符串 SELECT D.Name AS Department,M ...
最新文章
- centos7 安装mysql php_Centos7安装mysql与php的方法
- 扩展存储过程在哪里_北京延庆工业废水处理哪里有
- 【广东省】2020年下软考证书领取通知
- Echarts实现隐藏x轴,y轴,刻度线,网格
- 【软件工程】软件文档
- sql 查询数据库索引重建_SQL查询性能的杀手– –了解不良的数据库索引
- ddr老化测试_手把手教你评估和测试固态存储【深度】
- MyBatis的三个基本要素
- Ant的使用 - 简单介绍
- JAVA绘制拼音有问题
- css设置背景虚化,vue移动端登录页
- 「 数学模型 」“灰色模型的研究步骤及五步建模思想”讲解
- libtorrent安装windows版
- SAP错误消息调试之七种武器:让所有的错误消息都能被定位
- vmware虚拟机网络设置详解
- Java实现给PDF文件加水印、图片、签名(含测试类)
- JavaScript中的柯里化(currying)
- 作文 我眼中的计算机1000字,我眼中的自己作文范文1000字(精选6篇)
- C/C++ 混合编译 C++中的extern “C“
- java斗地主代码花色,集合经典案例:斗地主发牌功能实现