在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