PERCENT_RANK (Transact-SQL)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
SQL Server の行のグループ内の行の相対的な順位を計算します。 PERCENT_RANK
を使用して、クエリ結果セットまたはパーティション内の値の相対的な位置を評価します。 PERCENT_RANK
は、 CUME_DIST 関数に似ています。
構文
PERCENT_RANK( )
OVER ( [ partition_by_clause ] order_by_clause )
引数
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
以下です。 セット内の最初の行には、0
のPERCENT_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