在SQL Server中,我試圖獲得前5名工資。在SQL Server中查找頂部行的SQL查詢
我的工資就像
5000
5000
4500
4500
3000
2000
1000
500
400
,我想獲得
5000
5000
4500
4500
3000
2000
1000
在SQL Server中,我試圖獲得前5名工資。在SQL Server中查找頂部行的SQL查詢
我的工資就像
5000
5000
4500
4500
3000
2000
1000
500
400
,我想獲得
5000
5000
4500
4500
3000
2000
1000
如果你想獲得前5名不同的工資(不論相同金額可能有多少次出現),您需要使用DENSE_RANK()
排名功能和CTE來實現這一目標:
DECLARE @salaries TABLE (salary DECIMAL(18,4))
INSERT INTO @salaries VALUES(5000)
INSERT INTO @salaries VALUES(5000)
INSERT INTO @salaries VALUES(4500)
INSERT INTO @salaries VALUES(4500)
INSERT INTO @salaries VALUES(3000)
INSERT INTO @salaries VALUES(2000)
INSERT INTO @salaries VALUES(1000)
INSERT INTO @salaries VALUES(500)
INSERT INTO @salaries VALUES(400)
;WITH SalariesRanked AS
(
SELECT
Salary,
SalaryNumber = DENSE_RANK() OVER(ORDER BY Salary DESC)
FROM
@salaries
)
SELECT salary
FROM SalariesRanked
WHERE SalaryNumber <= 5
這導致輸出這樣的:
salary
5000.0000
5000.0000
4500.0000
4500.0000
3000.0000
2000.0000
1000.0000
SELECT TOP 5 salary FROM your_table
ORDER BY salary DESC
看一看使用TOP (Transact-SQL)
select salary
from
(
select salary,
dense_rank() over(order by salary desc) as rn
from YourTable
) as T
where rn <= 5
嘗試在SE-Data
SELECT TOP 5 Salary
FROM [Table]
GROUP BY Salary
ORDER BY Salary DESC
您需要組查詢,以避免重複小號alaries。
我相信OP希望獲得前5名(不同)工資金額 - 無論每個工資金額出現多少次。至少這就是他在中間的編輯似乎表明...... – 2012-04-13 11:33:46
@marc_s:當OP張貼他的問題(正如你所看到的)我的回答是正確的... – Marco 2012-04-13 11:37:36
第一篇文章:是的。但是OP在編輯#4中改變了他的問題以表明目前的情況。 – 2012-04-13 11:38:24