Sql server SQL查询以查找SQL Server中的顶行
在SQL Server中,我试图获得前5名的薪水 我的薪水像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
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