我有一個名爲employee_salary
的表,其中有兩列(emp_id,emp_salary)。SQL查詢獲取第三最低值
我有一個要求從這張表中取得第三低的emp_salary
。在這種情況下,我的查詢應該是什麼,以便我可以得到確切的值。
我有一個名爲employee_salary
的表,其中有兩列(emp_id,emp_salary)。SQL查詢獲取第三最低值
我有一個要求從這張表中取得第三低的emp_salary
。在這種情況下,我的查詢應該是什麼,以便我可以得到確切的值。
這可以是一個溶液
select top 1 * from
(
select top 3 * from
(
select distinct emp_sal from employee order by asc emp_sal
) d orderby desc emp_sal
)
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 *
僅限SQL Server 2000+。 – 2011-05-10 05:39:18
使用窗口函數...這個結構是SQL Server:
;WITH CTE AS
(
SELECT ..., ROW_NUMBER() OVER (ORDER BY emp_salary) AS rn
FROM myTable
)
SELECT ...
FROM CTE
WHERE rn = 3
爲相同的薪水,你可以開始使用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
我在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
用於當一個或多個薪水相同時。
對於什麼數據庫?這是分析工作(IE:ROW_NUMBER) – 2011-05-10 05:36:41
..以及該數據庫的哪個版本? – gbn 2011-05-10 05:38:24
那麼相同的工資呢? – gbn 2011-05-10 05:40:42