APPROX_PERCENTILE_DISC (Transact-SQL)

S’applique à : SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstancePoint de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

Fonction qui retourne la valeur à partir de l’ensemble de valeurs d’un groupe en fonction de la spécification de centile et de tri fournie. Étant donné qu’il s’agit d’une fonction approximative, la sortie se trouve dans une erreur basée sur le classement liée avec une certaine confiance. Étant donné que ce centile approximatif est basé sur une distribution discrète des valeurs de colonne, la valeur de sortie est égale à l’une des valeurs spécifiques de la colonne. Cette fonction peut être utilisée comme alternative à PERCENTILE_DISC pour les jeux de données volumineux où une erreur négligeable avec une réponse plus rapide est acceptable par rapport à une valeur de centile précise avec un temps de réponse lent.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Argument

numeric_literal

Percentile à calculer. Il doit être compris entre 0.0 et 1.0. pour calculer le 10e centile, la valeur passée serait de 0,10.

order_by_expression

Spécifie la liste des valeurs à trier et sur lesquelles calculer le percentile. L’ordre de tri par défaut est croissant (ASC).  Seuls les types de données numériques sont autorisés. L’expression doit correspondre à un type numérique exact ou approximatif pris en charge, sans aucun autre type de données autorisé. Les types numériques exacts pris en charge sont int, bigint, smallint, tinyint, bit, smallmoney et money. Les types numériques approximatifs sont pris en charge sont flottant ou réel. Les types de données flottants ou décimaux ne sont pas pris en charge.

Types de retour

Le type de retour est déterminé par le type order_by_expression.

Remarques

Toutes les valeurs NULL dans le jeu de données sont ignorées.

Les fonctions de centile approximatives utilisent des croquis KLL. Le croquis est généré en lisant le flux de données.

Cette fonction fournit des garanties d’erreur basées sur le classement et non basées sur la valeur. L’implémentation de la fonction garantit un taux d’erreur pouvant atteindre 1,33 % avec une probabilité de 99 %.

Comportements connus

  • La sortie des fonctions peut ne pas être la même dans toutes les exécutions. L’algorithme utilisé pour ces fonctions est un croquis KLL qui est un algorithme aléatoire. Chaque fois que le croquis est généré, les valeurs aléatoires sont choisies. Ces fonctions fournissent des garanties d’erreur basées sur le classement et non basées sur la valeur.

  • L’implémentation de la fonction garantit une limite d’erreur pouvant atteindre 1.33 % avec une confiance de 99 %.

Prise en charge de la compatibilité

Lorsque le niveau de compatibilité est 110 et supérieur, WITHIN GROUP est un mot clé réservé. Pour plus d’informations, consultez Niveau de compatibilité ALTER DATABASE (Transact-SQL).

Exemples

L’exemple suivant crée une table, la remplit et exécute l’exemple de requête.

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