RANK (Transact-SQL)
結果セットのパーティション内の各行の順位を返します。行の順位は、その行より上にある順位の数に 1 を加えたものです。
構文
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
説明
複数の行が 1 つの順位を分け合う場合は、それぞれの行に同じ順位が付けられます。たとえば、上位 2 人の販売員の SalesYTD 値が同じである場合は、両方に順位 1 が付けられます。SalesYTD が次に高い販売員には、順位 3 が付けられます。順位のより高い行が 2 つあるためです。そのため、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