共用方式為


APPROX_PERCENTILE_DISC (Transact-SQL)

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

此函式會根據提供的百分位數和排序規格,從群組中的值集合傳回值。 由於這是近似函式,因此輸出將在具有特定信賴度的順位型錯誤界限內。 因為這個近似百分位數是以資料行值的離散分佈為基礎,所以輸出值將等於資料行中的其中一個特定值。 相較於回應時間緩慢的精確百分位數值,此函式可以用來替代大型資料集的 PERCENTILE_DISC,其中可接受回應速度較快的可忽略錯誤。

Transact-SQL 語法慣例

Syntax

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。 不支援十進位和 float 資料類型。

傳回類型

傳回型別由 order_by_expression 類型決定。

備註

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

近似百分位數函式會使用 KLL 草圖。 草圖的建置方式是讀取資料的串流。

此函式提供不是以值為基礎的順位型錯誤保證。 函式實作保證在 99% 機率內最多 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_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