分享方式:


APPROX_PERCENTILE_CONT (Transact-SQL)

適用於: Microsoft Fabric 中Microsoft網狀架構倉儲中的 SQL Server 2022 (16.x) Azure SQL 資料庫 Azure SQL 受控執行個體 SQL 分析端點

此函式會根據百分位數值和排序規格,從群組中的一組值傳回近似插補值。 由於這是近似函式,因此輸出將在具有特定信賴度的順位型錯誤界限內。 此函式所傳回的百分位數值是以資料行值的連續分佈為基礎,而且結果是插補。 因此,輸出可能不是資料集的其中一個值。 此函式的其中一個常見使用案例是避免資料極端值。 相較於回應時間緩慢的精確百分位數值,此函式可以用來替代大型資料集的 PERCENTILE_CONT,其中可接受回應速度較快的可忽略錯誤。

Transact-SQL 語法慣例

Syntax

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。 預設排序順序為遞增 (ASC)。 此運算式求得的解必須是精確數值類型或近似數值類型,不允許其他資料類型。 精確數值類型為 int、bigint、smallint、tinyint、numeric、bit、decimal、smallmoney 和 money。 近似數值類型為 float 和 real。

傳回類型

float(53)

備註

資料集中所有的 Null 皆會予以忽略。

近似百分位數函式會使用 KLL 草圖。 草圖的建置方式是讀取資料的串流。 由於使用的演算法,此函式所需的記憶體小於其非近似對應項目 (PERCENTILE_CONT)。

此函式提供不是以值為基礎的順位型錯誤保證。 函式實作保證最多 1.33% 的錯誤。

已知行為

  • 函式的輸出在所有執行中可能都不相同。 用於這些函式的演算法是 KLL 草圖,這是隨機演算法。 每次建置草圖時,都會挑選隨機值。 這些函式提供不是以值為基礎的順位型錯誤保證。
  • 函式實作保證在 99% 信賴度內最多 1.33% 的錯誤界限。

相容性支援

WITHIN GROUP 在相容性層級 110 及更高之下屬於保留的關鍵字。 如需詳細資訊,請參閱 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;