2011-05-10 142 views
1

我有一個名爲employee_salary的表,其中有兩列(emp_id,emp_salary)。SQL查詢獲取第三最低值

我有一個要求從這張表中取得第三低的emp_salary。在這種情況下,我的查詢應該是什麼,以便我可以得到確切的值。

+0

對於什麼數據庫?這是分析工作(IE:ROW_NUMBER) – 2011-05-10 05:36:41

+0

..以及該數據庫的哪個版本? – gbn 2011-05-10 05:38:24

+0

那麼相同的工資呢? – gbn 2011-05-10 05:40:42

回答

1

我已經在Postgres數據庫測試此。我希望這個查詢適用於所有類型的數據庫。請試試這個。

select emp_salary from emp_salary group by emp_salary order by emp_salary limit 1 offset 2; 
+0

它工作正常... – Kamal 2011-05-10 07:16:17

+0

非常感謝你 – Kamal 2011-05-10 07:16:38

+0

歡迎@Kamal。 – 2011-05-10 07:49:20

1

這可以是一個溶液

select top 1 * from 
(
    select top 3 * from 
    (
    select distinct emp_sal from employee order by asc emp_sal 
    ) d orderby desc emp_sal 
) 
0

SELECT TOP 1 * FROM employee_salary WHERE emp_salary在(SELECT TOP 3 emp_salary FROM employee_salary ORDER BY emp_salary)ORDER BY emp_salary DESC

然而,這不工作在所有數據庫中。你需要找出替代方案。例如。在Informix中,該語句將被SELECT FIRST 1 *

+0

僅限SQL Server 2000+。 – 2011-05-10 05:39:18

0

使用窗口函數...這個結構是SQL Server:

;WITH CTE AS 
(
SELECT ..., ROW_NUMBER() OVER (ORDER BY emp_salary) AS rn 
FROM myTable 
) 
SELECT ... 
FROM CTE 
WHERE rn = 3 
0

爲相同的薪水,你可以開始使用RANK() function in SQL Server

;WITH CTE AS 
(
SELECT ..., RANK() OVER (ORDER BY emp_salary) AS rn 
FROM myTable 
) 
SELECT ... 
FROM CTE 
WHERE rn = 3 
0

我在SQL Server 2008中

Select MIN(emp_salary) from MyTable Where emp_salary in 
(Select DISTINCT TOP 3 emp_salary from MyTable order by 1 DESC) 

執行下面的查詢得到的答案我得到了第3最小值。

DISTINCT用於當一個或多個薪水相同時。