次の方法で共有


RANK (Transact-SQL)

結果セットのパーティション内の各行の順位を返します。行の順位は、その行より上にある順位の数に 1 を加えたものです。

トピック リンク アイコン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

説明

複数の行が 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