如何在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 关键字,并非所有数据库系统都支持。目前,它受 MySQL 和 PostgreSQL 支持。
方法 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;
广告