Sql server SQL查询以查找SQL Server中的顶行

Sql server SQL查询以查找SQL Server中的顶行,sql-server,Sql Server,在SQL Server中,我试图获得前5名的薪水 我的薪水像 5000 5000 4500 4500 3000 2000 1000 500 400 我想得到一份工作 5000 5000 4500 4500 3000 2000 1000 看看如何使用看看如何使用 试穿 试一试如果您想获得前5名不同的薪资,无论相同金额出现多少次,您都需要使用稠密排名功能和CTE来实现这一点: DECLARE @salaries TABLE (salary DECIMAL(18,4)) INSERT INT

在SQL Server中,我试图获得前5名的薪水

我的薪水像

5000
5000
4500
4500
3000
2000 
1000
500
400
我想得到一份工作

5000
5000
4500
4500
3000
2000
1000 
看看如何使用

看看如何使用

试穿


试一试

如果您想获得前5名不同的薪资,无论相同金额出现多少次,您都需要使用稠密排名功能和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

如果您想获得前5名不同的工资,无论相同金额出现多少次,您需要使用稠密的排名函数和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
您需要对查询进行分组,以避免重复的薪资


您需要对查询进行分组,以避免重复的薪资。

我相信OP希望获得前5个不同的薪资金额-无论每个薪资金额显示多少次。至少这是他的编辑在中间似乎有时间表明……第一次发布:是的。但是OP在编辑4中更改了他的问题,以表明当前的情况。@marc_s:现在我明白了,但我在OP发布他的问题后立即回答了。。。是的,现在问题不同了,我的回答没有解决他的问题。。。那么,我应该删除你的意见吗?离开它-它的问题是:如何获得前5的工资- OP改变了他的想法在游戏中……我相信,OP希望获得前5个不同的薪金数额-无论多少次,每一个工资数额出现。至少这是他的编辑在中间似乎有时间表明……第一次发布:是的。但是OP在编辑4中更改了他的问题,以表明当前的情况。@marc_s:现在我明白了,但我在OP发布他的问题后立即回答了。。。是的,现在问题不同了,我的回答没有解决他的问题。。。那么,我应该删除你的意见吗?离开它-它确实解决的问题:如何获得前5的工资- OP改变了他的想法在游戏中…
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 [Table]
GROUP BY Salary
ORDER BY Salary DESC