基于多个条件对字段进行排名的 T-Sql 语法
Posted
技术标签:
【中文标题】基于多个条件对字段进行排名的 T-Sql 语法【英文标题】:T-Sql syntax to RANK a field based on several criteria 【发布时间】:2015-06-16 09:25:10 【问题描述】:我在 SQL Server 2014 中有一个 SQL 查询,它输出以下内容(显示的摘录,实际输出约为 45,000 条记录):
ResaID Agency Sales MTH Market Property
235 Smith 500 February 2015 UK RAV
451 John 1600 February 2015 France PLN
258 Alan 800 January 2015 UK BLS
我需要一个 SQL 查询,它将根据以下标准对代理列进行排名:MTH、市场和财产,并给我以下输出(如下所示的虚构排名):
ResaId Rank
235 10
451 2
258 9
然后,我将使用基于 ResaID 的 JOIN 将“排名输出”与我的初始查询连接起来。
简单来说,代理商的排名需要在 MTH、Market 和 Property 分组之后进行。
这可以使用 T-SQL 语法来实现吗?
编辑:我希望根据销售额进行排名。
【问题讨论】:
10 是多少?什么是2?什么是 9?为什么是10?为什么2?为什么是 9? 请看这个答案***.com/questions/7747327/sql-rank-versus-row-number @GiorgiNakeuri 10 表示在房地产“RAV”和“英国”市场中,根据他的销售额,史密斯在 2015 年 2 月排名第 10。其余的逻辑相同。 @TheGameiswar 感谢您的链接,但我仍然对排名和行号有点困惑。等级,我的意思是“给定一个从最大到最小的等级数”。在我的示例中,如果我在 2015 年 2 月有 20 条关于物业 X 的英国市场记录,它将排名 1 分配给取得最高销售额的代理机构,依此类推,而代理取得最低销售额则给定排名 20。 【参考方案1】:是的,你可以这样写:
SELECT *, RANK() OVER(PARTITION BY Agency, mht ORDER BY sales DESC)
FROM [yourTable]
【讨论】:
顺便说一句。如果你想要一个具有独特值的排名,你可以使用 dense_rank() ,它的工作方式与我上面的代码示例相同。 可能是我的帖子不够明确。我希望根据销售额进行排名。我已经相应地编辑了我的帖子。 我已经更改了脚本,只是更改了列并更改了排序顺序。应该和之前的脚本一样。 @Ionic 谢谢,但这并不是我想要的。在我的示例中,如果我在 2015 年 2 月有 20 条关于 Property X 的英国市场记录,它将排名 1 分配给实现最高销售额的代理机构,依此类推,而代理机构在排名 20 的情况下实现最低销售额。基本上,查询需要首先对同一物业、同一月份、同一市场内的所有数据进行分组,然后从那里进行排名,将销售额最高的机构评为 1 等。因此,我的 45,000 条记录将根据属性、月份和市场进行分组,并将在这些集群中进行排名。 我已经添加了分组 - 正如你所说的那样,它最初是错误的 :-D。我不知道您的分组需要哪些字段。但是你应该通过这个例子得到它。以上是关于基于多个条件对字段进行排名的 T-Sql 语法的主要内容,如果未能解决你的问题,请参考以下文章