ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL.185.(困难)部门工资前三高的所有员工

2022-03-21 22:00:01  阅读:191  来源: 互联网

标签:name Employee 员工 前三高 SQL.185 Department --------+ 排序 id


题目:
表: 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的工资最高
  • 兰迪和乔都赚取第二高的独特的薪水
  • 威尔的薪水是第三高的

在销售部:

  • 亨利的工资最高
  • 山姆的薪水第二高
  • 没有第三高的工资,因为只有两名员工

题解:

#Write your MySQL query statement below
SELECT Department,Employee,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 ranks
#rank()排序相同时会重复,往下排会跳过重复名次,总数不变,即会出现1、1、3这样的排序结果;
#dense_rank()排序相同时会重复,导致总数减少,即会出现1、1、2这样的排序结果;
#row_number()排序相同时不会重复,会根据顺序排序。
#此时因为需要用到排序,不可用where/having(必须与group by一起使用)在原查询中筛选名次,从而必须用到子查询,然后在外层用where进行筛选。
FROM Employee E
LEFT JOIN Department D
on E.DepartmentId=D.id) A1
WHERE ranks<=3

标签:name,Employee,员工,前三高,SQL.185,Department,--------+,排序,id
来源: https://blog.csdn.net/shinytrainee/article/details/123646372

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有