RANK (Transact-SQL)
返回结果集的分区内每行的排名。行的排名是相关行之前的排名数加一。
语法
RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
参数
- < partition_by_clause >
将 FROM 子句生成的结果集划分成 RANK 函数适用的分区。有关 PARTITION BY 的语法,请参阅 OVER 子句 (Transact-SQL)。
- < order_by_clause >
确定将 RANK 值应用于分区中的行时所基于的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。当在排名函数中使用 <order_by_clause> 时,不能用整数表示列。
返回类型
bigint
备注
如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名。例如,如果两位顶尖销售员具有相同的 SalesYTD 值,则他们将并列第一。由于已有两行排名在前,所以具有下一个最大 SalesYTD 的销售人员将排名第三。因此,RANK 函数并不总返回连续整数。
用于整个查询的排序顺序决定了行在结果集中的显示顺序。
示例
以下示例按照数量对清单中的产品进行了排名。行集按 LocationID
分区,按 Quantity
排序。注意,OVER
子句中的 ORDER BY
对 RANK
进行排序,SELECT
语句的 ORDER BY
对结果集进行排序。
USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK'
FROM Production.ProductInventory i
INNER JOIN Production.Product p
ON i.ProductID = p.ProductID
ORDER BY p.Name;
GO
请参阅
参考
DENSE_RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
排名函数 (Transact-SQL)
Functions (Transact-SQL)