如何在SQL中查找第二高的薪水


在现实场景中,您经常需要查询第 n 高的薪水。让我们看看如何在 SQL 中查找第二高的薪水。

示例

考虑一个名为 Company 的示例表,其中包含 Employee 和 Salary 列

表名:Company

员工 (Employee)

薪水 (Salary)

Adithya 1000
Abhishek 2500
Nandini 1500
Raju 3000
Vikas 800

方法 1:使用子查询

在这种方法中,内部子查询从 Employee 表中查找最高的薪水。然后,外部查询通过从表中排除实际最高的薪水来查找最高的薪水。

示例

SELECT MAX(Salary) FROM Employee WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee);

Learn SQL in-depth with real-world projects through our SQL certification course. Enroll and become a certified expert to boost your career.

方法 2:使用 LIMIT 子句

在这里,查询从 Employee 表中选择所有不同的薪水值,按降序排列,然后使用 LIMIT 子句 选择第二条记录。

示例

SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1,1;

注意:此方法使用 LIMIT 关键字,并非所有数据库系统都支持。目前,它受 MySQLPostgreSQL 支持。

方法 3:使用 NOT EXISTS

在外部查询中,我们从员工表中选择薪水,并将其别名为 e1。

内部查询也使用员工表,并将其别名为 e2。此查询检查员工表中是否存在大于外部查询中当前薪水的薪水。NOT EXISTS 子句检查内部查询是否返回任何行。如果内部查询没有返回任何行,则意味着没有薪水大于外部查询中的当前薪水。在这种情况下,当前薪水就是第二高的薪水。

示例

SELECT Salary FROM Employee e1 WHERE NOT EXISTS (SELECT 1 FROM Employee e2 WHERE e2.salary > e1.salary);

方法 4:使用窗口函数

在这里,将按降序对每个薪水分配一个排名。第二高的薪水将排名为 2。

示例

SELECT Salary FROM (SELECT Salary, DENSE_RANK() OVER (ORDER BY Salary DESC) AS rk FROM Employee) AS RE WHERE rk = 2;

更新于:2024年9月19日

37 次浏览

开启您的 职业生涯

完成课程获得认证

开始学习
广告