如何在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 關鍵字,並非所有資料庫系統都支援。目前,它受 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 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告