如何在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);
方法 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;
廣告