次の方法で共有


PERCENT_RANK (Transact-SQL)

適用対象: SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Microsoft Fabric のツールハウス内の SQL 分析エンドポイント

SQL Server の行のグループ内の行の相対的な順位を計算します。 PERCENT_RANKを使用して、クエリ結果セットまたはパーティション内の値の相対的な位置を評価します。 PERCENT_RANK は、 CUME_DIST 関数に似ています。

構文

PERCENT_RANK( )
    OVER ( [ partition_by_clause ] order_by_clause )

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

OVER ( [ partition_by_clause ] order_by_clause )

最初のパラメーター partition_by_clauseは、 FROM 句によって生成された結果セットを、関数が適用されるパーティションに分割します。 指定しない場合、関数ではクエリ結果セットのすべての行を 1 つのグループとして扱います。 2 番目のパラメーター order_by_clauseは、操作が実行される論理的な順序を決定します。 order_by_clause は必須です。 PERCENT_RANK関数では、OVER構文の<rows or range clause>を指定できません。 詳細については、 SELECT - OVER 句を参照してください。

戻り値の型

float(53)

解説

PERCENT_RANKによって返される値の範囲は、0より大きく、1以下です。 セット内の最初の行には、0PERCENT_RANKがあります。 NULL 値は既定で含まれており、可能な限り低い値として扱われます。

PERCENT_RANK は非決定的です。 詳細については、「決定的関数と非決定的関数」を参照してください。

この記事の Transact-SQL コード サンプルは AdventureWorks2022 または AdventureWorksDW2022 サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。

次の例では、 CUME_DIST 関数を使用して、特定の部門内の各従業員の給与パーセンタイルを計算します。 CUME_DIST関数によって返される値は、同じ部署の現在の従業員以下の給与を持つ従業員の割合を表します。 PERCENT_RANK関数は、部門内の従業員の給与のランクをパーセンテージで計算します。 PARTITION BY句は、部門別に結果セット内の行をパーティション分割するために指定されます。 OVER句のORDER BY句は、各パーティションの行を並べ替えるものです。 SELECT ステートメントのORDER BY句は、結果セット全体の行を並べ替えます。

USE AdventureWorks2022;
GO

SELECT Department,
    LastName,
    Rate,
    CUME_DIST() OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist,
    PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate) AS PctRank
FROM HumanResources.vEmployeeDepartmentHistory AS edh
INNER JOIN HumanResources.EmployeePayHistory AS e
    ON e.BusinessEntityID = edh.BusinessEntityID
WHERE Department IN (N'Information Services', N'Document Control')
ORDER BY Department, Rate DESC;

結果セットは次のようになります。

Department             LastName               Rate              CumeDist           PctRank
---------------------- ---------------------- ----------------- ------------------ ------------------
Document Control       Arifin                 17.7885           1                  1
Document Control       Norred                 16.8269           0.8                0.5
Document Control       Kharatishvili          16.8269           0.8                0.5
Document Control       Chai                   10.25             0.4                0
Document Control       Berge                  10.25             0.4                0
Information Services   Trenary                50.4808           1                  1
Information Services   Conroy                 39.6635           0.9                0.888888888888889
Information Services   Ajenstat               38.4615           0.8                0.666666666666667
Information Services   Wilson                 38.4615           0.8                0.666666666666667
Information Services   Sharma                 32.4519           0.6                0.444444444444444
Information Services   Connelly               32.4519           0.6                0.444444444444444
Information Services   Berg                   27.4038           0.4                0
Information Services   Meyyappan              27.4038           0.4                0
Information Services   Bacon                  27.4038           0.4                0
Information Services   Bueno                  27.4038           0.4                0