Sql 为每个类别选择前5名薪资
我有一张和这张相似的桌子:Sql 为每个类别选择前5名薪资,sql,sql-server-2008,select,Sql,Sql Server 2008,Select,我有一张和这张相似的桌子: id sml desc amount 1 23 bla 100 2 23 bla 50 3 23 bla 30 4 23 bla 20 1 40 bla1 100 2 40 bla2 23 3 40 bla3 34 4 40 bla4 34 它是来自其他表的多个联接的结果。我想为每个sml值选择金额列中价值最高的五名员工 下面的示例输出:我的
id sml desc amount
1 23 bla 100
2 23 bla 50
3 23 bla 30
4 23 bla 20
1 40 bla1 100
2 40 bla2 23
3 40 bla3 34
4 40 bla4 34
它是来自其他表的多个联接的结果。我想为每个sml值选择金额列中价值最高的五名员工
下面的示例输出:我的示例没有五个sml,所以我只使用了两个。另外,如果第5和第6个值相等,我想返回这两个值
id sml desc amount
1 23 bla 100
2 23 bla 50
1 40 bla1 100
2 40 bla2 100
3 40 bla3 34
我尝试了以下查询:
select [MS_EmployeeNumber],[SA_Semel],[Description],sum([MS_Amount]) as Amount,
rank() over (Partition BY [SA_Semel], [Description]
select [MS_EmployeeNumber],[SA_Semel],[Description],sum([MS_Amount]) as Amount,
rank() over (Partition BY [SA_Semel], [Description]
ORDER BY sum([MS_Amount]) Desc) AS Rank
from [dbo].[MonthlySalary] as sml
inner join [dbo].[SmlAnalyse] as SA on SA.SA_Semel = sml.MS_Semel
inner join [dbo].[SalarySMLlist] as list on list.Semel = SA.SA_Semel
group by [MS_EmployeeNumber],[SA_Semel],[Description]
order by SA_Semel, Amount desc
当我管理这个职位的时候,他把工作放在全桌上,考虑我在MsSeMell上做排名的要求。 < P>我觉得你的询问太复杂了。rank或相当密集的_rank,根据您处理重复项的方式,已经为您提供了每个sml的排名,现在您只需要进行相应的筛选:
SELECT [id], [sml], [desc], [amount]
FROM (SELECT [id], [sml], [desc], [amount],
DENSE_RANK() OVER (PARTITION BY [sml] ORDER BY [amount] DESC) rk
FROM [dbo].[MonthlySalary]) t
WHERE rk <= 5
我觉得你的问题太复杂了。rank或相当密集的_rank,根据您处理重复项的方式,已经为您提供了每个sml的排名,现在您只需要进行相应的筛选:
SELECT [id], [sml], [desc], [amount]
FROM (SELECT [id], [sml], [desc], [amount],
DENSE_RANK() OVER (PARTITION BY [sml] ORDER BY [amount] DESC) rk
FROM [dbo].[MonthlySalary]) t
WHERE rk <= 5
我不确定我是否听懂了。你能分享一下你想从这个输入样本中得到的结果吗?我没有分析你的整个查询。似乎您已经知道如何使用秩,所以只需将查询添加为子查询和外部选择,并使用where条件rankI(我不确定我是否遵循)。你能分享一下你想从这个输入样本中得到的结果吗?我没有分析你的整个查询。似乎您已经知道如何使用秩,所以只需将您的查询添加为子查询和外部选择,其中条件rankI认为秩比稠密秩更合适。考虑值为100100100100100100、99、98、97、96的情况。我把这个问题理解为只想要100个,而不是全部。我认为排名比密集排名更合适。考虑值为100100100100100100、99、98、97、96的情况。我把这个问题理解为只想要100个,而不是全部。