📅  最后修改于: 2023-12-03 15:20:16.997000             🧑  作者: Mango
在企业中,涉及到职位的升迁和薪水的调整。为了让职位更加清晰明了,一般会对职位进行划分,比如高级开发工程师、架构师、技术总监等。而随着职位的升高,薪水也会随之增加。因此,需要在数据库中对职位和薪水进行管理。
本文主要介绍如何使用 SQL 按位置划分薪水,返回每个位置中的最高薪水。
SELECT t.PositionId, MAX(t.Salary) AS MaxSalary
FROM Employee e
JOIN (
SELECT PositionId, Salary
FROM (
SELECT PositionId, Salary, RANK() OVER (PARTITION BY PositionId ORDER BY Salary DESC) AS Rank
FROM Employee
) AS temp
WHERE Rank = 1
) AS t
ON e.PositionId = t.PositionId AND e.Salary = t.Salary
GROUP BY t.PositionId
ORDER BY t.PositionId;
该 SQL 代码分为两部分:
具体实现逻辑如下:
最后,使用 ORDER BY 将结果按职位编号排序,返回按位置划分的最高薪水。
例如,给定如下 Employee 表:
| Id | Name | Salary | PositionId | |----|------|--------|-----------| | 1 | A | 5000 | 1 | | 2 | B | 4500 | 2 | | 3 | C | 6000 | 1 | | 4 | D | 8000 | 3 | | 5 | E | 7500 | 3 | | 6 | F | 6000 | 2 | | 7 | G | 4000 | 1 |
我们可以运行上述 SQL 代码,得到以下结果:
| PositionId | MaxSalary | |------------|-----------| | 1 | 6000 | | 2 | 6000 | | 3 | 8000 |
可以看到,运行结果按照 PositionId 分组,返回了每个职位的最高薪水。