DENSE_RANK (Transact-SQL)
結果セットのパーティションにおける行の順位を返します。この順位付けではギャップが発生しません。行の順位は、対象となる行より 1 つ前の順位の番号に 1 を加算したものになります。
構文
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
解説
同じパーティションで複数の行が 1 つの順位を分け合う場合は、それぞれの行に同じ順位が付けられます。たとえば、上位 2 人の販売員の SalesYTD 値が同じである場合は、両方に順位 1 が付きます。SalesYTD が次に高い販売員には、順位 2 が付きます。これは、この行より前の行の番号に 1 を加えたものです。したがって、DENSE_RANK 関数からは、常に番号のギャップが発生しない連続する順位番号が返されます。
クエリ全体に使用される並べ替え順序によって、結果における行の順序が決まります。つまり、順位が 1 位である行が必ずしもパーティションの先頭の行とは限りません。
例
次の例では、さまざまな場所における製品の数量の 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)
関数 (Transact-SQL)