PERCENT_RANK (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

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 は必須です。 <rows or range clause>関数で構文をOVER指定PERCENT_RANKすることはできません。 詳細については、「Standard Edition LECT - OVER 句」を参照してください。

戻り値の型

float(53)

解説

返されるPERCENT_RANK値の範囲が次の値01以上です。 任意のセットの最初の行には、 PERCENT_RANK 次の値があります 0NULL 値は既定で含まれており、可能な限り低い値として扱われます。

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

この記事には AdventureWorks2022 サンプル データベースが必要です。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。

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

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