-185. 部门工资前三高的所有员工-困难)
一、完整建表 SQLMySQL 语法-- 创建员工表 CREATE TABLE Employee ( id INT PRIMARY KEY, name VARCHAR(20), salary INT, departmentId INT ); id 是该表的主键列(具有唯一值的列)。 departmentId 是 Department 表中 ID 的外键reference 列。 该表的每一行都表示员工的ID、姓名和工资。它还包含了他们部门的ID。 -- 创建部门表 CREATE TABLE Department ( id INT PRIMARY KEY, name VARCHAR(20) ); id 是该表的主键列(具有唯一值的列)。 该表的每一行表示部门ID和部门名。-- 插入员工数据 INSERT INTO Employee(id, name, salary, departmentId) VALUES (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); -- 插入部门数据 INSERT INTO Department(id, name) VALUES (1, IT), (2, Sales);二、需求公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的高收入者是指一个员工的工资在该部门的不同工资中排名前三。编写解决方案找出每个部门中收入高的员工。以任意顺序返回结果表。返回结果格式如下所示。三、 思路与解题难度何在只要你接触过with 和窗口函数这道题就是分分钟的事情这也算“困难”吗都没有前面几道情景题有难度# Write your MySQL query statement below with rank1 as( select dense_rank() over(PARTITION BY departmentId ORDER BY salary DESC) new_id, e.name Employee,salary Salary,d.name Department from Employee e join Department d on e.departmentIdd.id ) select Department,Employee,Salary from rank1 where new_id3 order by Salary客观分层评价对于只学过基础GROUP BY、JOIN、子查询没有接触窗口函数的同学超级难MySQL5.7 版本的关联子查询写法很难自己写出来如果你掌握了PARTITION BY DENSE_RANK()它就变成中等题套路固定本题真正的难点有两处三个排名函数DENSE_RANK() / RANK() / ROW_NUMBER()区分很多人分不清用哪一个本题一旦误用RANK()就直接做错审题陷阱依据去重之后的薪资排名不是按员工个体排名90% 新手都会理解错误MySQL5.7 环境下没有窗口函数只能写关联子查询逻辑绕新手很难独立写出来。