適用於:SQL Server 2022 (16.x)
Azure SQL Database
AzureSQL Managed Instance
SQL Analytics endpoint in Microsoft Fabric Warehouse
in Microsoft Fabric
SQL database in Microsoft Fabric
此函式會根據百分位數值和排序規格,從群組中的一組值傳回近似插補值。 由於這是近似函式,因此輸出將在具有特定信賴度的順位型錯誤界限內。 此函式所傳回的百分位數值是以資料行值的連續分佈為基礎,而且結果是插補。 因此,輸出可能不是資料集的其中一個值。 此函式的其中一個常見使用案例是避免資料極端值。 相較於回應時間緩慢的精確百分位數值,此函式可以用來替代大型資料集的 PERCENTILE_CONT,其中可接受回應速度較快的可忽略錯誤。
語法
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;