APPROX_PERCENTILE_CONT (Transact-SQL)

適用対象: SQL Server 2022 (16.x)Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

この関数は、パーセンタイル値と並べ替えの指定に基づいて、グループ内の値セットから近似補間値を返します。 これは近似関数であるため、一定の信頼度があるランク ベースの誤差範囲内に収まる出力になります。 この関数から返されるパーセンタイル値は列値の連続分布に基づいており、その結果は補間されます。 このため、出力はデータ セットの値に含まれていない場合があります。 この関数の一般的なユース ケースの 1 つは、データの外れ値を回避することです。 この関数は、応答時間が遅い正確なパーセンタイル値と比較して、応答が速く、無視できるエラーが許容される大規模なデータセットの場合に、PERCENTILE_CONT の代わりに使用できます。

Transact-SQL 構文表記規則

構文

APPROX_PERCENTILE_CONT (numeric_literal)
WITHIN GROUP (ORDER BY order_by_expression [ASC|DESC]) 

引数

numeric_literal

計算する百分位数です。 値は 0.0 ~ 1.0 で指定してください。

order_by_expression

並べ替える数値の一覧を指定し、百分位数を計算します。 order_by_expression は 1 つだけ許可されます。 既定の並べ替え順は昇順 (ASC) です。  式は、真数型または概数型に評価される必要があります。他のデータ型は使用できません。 真数型には、int、bigint、smallint、tinyint、numeric、bit、decimal、smallmoney、money があります。 概数型は float と real です。

戻り値の型

float(53)

注釈

データセット内の NULL はすべて無視されます。

近似パーセンタイル関数には、KLL スケッチを使います。 スケッチを構築するには、データのストリームを読み込みます。 使うアルゴリズムによっては、この関数は、近似ではない対応するもの (PERCENTILE_CONT) よりも必要なメモリが少なくて済みます。

この関数を使うと、値ベースではなくランクベースのエラーを保証できます。 この関数の実装により、最大 1.33% のエラーが保証されます。

既知の動作

  • 関数の出力は、すべての実行で同じとは言えない場合があります。 これらの関数に使われるアルゴリズムは、ランダム化アルゴリズムである KLL スケッチです。 スケッチを構築するたびに、ランダムな値が選ばれます。 これらの関数を使うと、値ベースではなくランクベースのエラーを保証できます。
  • この関数の実装により、99% の信頼度でエラー上限が最大 1.33% 以内に収まることが保証されます。

互換性サポート

互換性レベル 110 以上では、WITHIN GROUP は予約されたキーワードです。 詳細については、「ALTER DATABASE 互換性レベル (Transact-SQL)」を参照してください。

次の例では、テーブルを作成し、データを入力し、サンプル クエリを実行します。

SET NOCOUNT ON
GO
DROP TABLE IF EXISTS tblEmployee;
GO
CREATE TABLE tblEmployee (
EmplId INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
DeptId INT,
Salary int);
GO
INSERT INTO tblEmployee
VALUES (1, 31),(1, 33), (1, 18), (2, 25),(2, 35),(2, 10), (2, 10),(3,
1), (3,NULL), (4,NULL), (4,NULL);
GO
SELECT DeptId,
APPROX_PERCENTILE_CONT(0.10) WITHIN GROUP(ORDER BY Salary) AS 'P10',
APPROX_PERCENTILE_CONT(0.90) WITHIN GROUP(ORDER BY Salary) AS 'P90'
FROM tblEmployee
GROUP BY DeptId;