APPROX_PERCENTILE_DISC (Transact-SQL)

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

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

Transact-SQL 構文表記規則

構文

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

引数

numeric_literal

計算する百分位数です。 値は 0.0 ~ 1.0 で指定してください。 10 パーセンタイルを計算する場合、渡される値は 0.10 です。

order_by_expression

並べ替える値のリストを指定し、百分位数を計算します。 既定の並べ替え順は昇順 (ASC) です。  数値データ型のみを使用できます。 式は、サポートされる真数型または概数型に評価される必要があります。他のデータ型は使用できません。 サポートされる真数型は int、bigint、smallint、tinyint、bit、smallmoney、money です。 サポートされる概数型は float と real です。 10 進数と浮動小数点数のデータ型はサポートされていません。

戻り値の型

戻り値の型は order_by_expression の型によって決まります。

注釈

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

近似パーセンタイル関数には、KLL スケッチを使います。 スケッチを構築するには、データのストリームを読み込みます。

この関数を使うと、値ベースではなくランクベースのエラーを保証できます。 99% の確率でエラー率が最大 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_DISC(0.10) WITHIN GROUP(ORDER BY Salary) AS 'P10',
APPROX_PERCENTILE_DISC(0.90) WITHIN GROUP(ORDER BY Salary) AS 'P90'
FROM tblEmployee
GROUP BY DeptId