DENSE_RANK (Transact-SQL)
返回结果集分区中行的排名,在排名中没有任何间断。行的排名等于所讨论行之前的所有排名数加一。
DENSE_RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
- < partition_by_clause >
将 FROM 子句生成的结果集划分为数个应用 DENSE_RANK 函数的分区。有关 PARTITION BY 的语法,请参阅 OVER 子句 (Transact-SQL)。
- < order_by_clause >
确定将 DENSE_RANK 值应用于分区中各行的顺序。整数不能表示排名函数中使用的 <order_by_clause> 中的列。
bigint
如果有两个或多个行受同一个分区中排名的约束,则每个约束行将接收相同的排名。例如,如果两位顶尖销售员具有相同的 SalesYTD 值,则他们将并列第一。接下来 SalesYTD 最高的销售人员排名第二。该排名等于该行之前的所有行数加一。因此,DENSE_RANK 函数返回的数字没有间断,并且始终具有连续的排名。
整个查询所用的排序顺序确定了各行在结果中的显示顺序。这说明排名第一的行可以不是分区中的第一行。
以下示例返回各位置上产品数量的 DENSE_RANK
。注意,OVER
子句中的 ORDER BY
对 DENSE_RANK
进行排序,SELECT
语句的 ORDER BY
对结果集进行排序。
USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity,
DENSE_RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity) AS DENSE_RANK
FROM Production.ProductInventory i
JOIN Production.Product p ON i.ProductID = p.ProductID
ORDER BY Name;
GO
RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
排名函数 (Transact-SQL)
Functions (Transact-SQL)