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
参照
関連項目
DENSE_RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
順位付け関数 (Transact-SQL)
関数 (Transact-SQL)