📅  最后修改于: 2023-12-03 14:52:52.692000             🧑  作者: Mango
这篇文章将介绍如何在SQL中获取每个部门的第二高薪水,这在数据分析和人力资源管理方面非常有用。
假设我们有一个名为employees
的表,其中包含以下列:
employee_id
:员工IDdepartment_id
:部门IDsalary
:员工薪水现在我们需要找到每个部门的第二高薪水。
我们可以使用RANK()
函数和INNER JOIN
来解决这个问题。
employees
表中使用RANK()
函数并根据薪水对每个员工进行排名。我们需要将结果存储在一个名为ranked_employees
的中间表中。SELECT
employee_id,
department_id,
salary,
RANK() OVER (
PARTITION BY department_id
ORDER BY salary DESC
) AS salary_rank
FROM employees
该查询将返回以下结果:
| employee_id | department_id | salary | salary_rank | |-------------|---------------|--------|-------------| | 101 | 1 | 7000 | 1 | | 103 | 1 | 6500 | 2 | | 104 | 1 | 6000 | 3 | | 106 | 2 | 8000 | 1 | | 107 | 2 | 7500 | 2 | | 109 | 2 | 7000 | 3 | | ... | ... | ... | ... |
INNER JOIN
与中间表ranked_employees
来获取每个部门的第二高薪水。SELECT
r1.department_id,
r1.salary AS second_highest_salary
FROM ranked_employees r1
INNER JOIN (
SELECT
department_id,
MAX(salary_rank) AS max_salary_rank
FROM ranked_employees
WHERE salary_rank < 2 -- 只查找第二高的薪水
GROUP BY department_id
) r2 ON r1.department_id = r2.department_id
AND r1.salary_rank = r2.max_salary_rank
该查询将返回以下结果:
| department_id | second_highest_salary | |---------------|----------------------| | 1 | 6500 | | 2 | 7500 | | ... | ... |
使用RANK()
函数和INNER JOIN
,我们可以轻松地获取每个部门的第二高薪水。这对于数据分析和人力资源管理来说非常有用。