APPROX_PERCENTILE_CONT (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

Cette fonction retourne une valeur interpolée approximative à partir de l’ensemble de valeurs d’un groupe en fonction de la valeur de centile et de la spécification de tri. É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. La valeur de centile retournée par cette fonction est basée sur une distribution continue des valeurs de colonne et le résultat est interpolé. En raison de cela, la sortie peut ne pas être l’une des valeurs du jeu de données. L’un des cas d’usage courants de cette fonction consiste à éviter les valeurs hors norme des données. Cette fonction peut être utilisée comme alternative à PERCENTILE_CONT 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_CONT (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.

order_by_expression

Spécifie une liste de valeurs numériques à trier et sur lesquelles calculer le percentile. Un seul argument order_by_expression est autorisé. L’ordre de tri par défaut est croissant (ASC).  L’expression doit correspondre à un type numérique exact ou approximatif, sans aucun autre type de données autorisé. Les types numériques exacts sont int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney et money. Les types numériques approximatifs sont float et real.

Types de retour

float(53)

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. En raison de l’algorithme utilisé, cette fonction nécessite moins de mémoire que son équivalent non approximatif (PERCENTILE_CONT).

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 %.

Comportements connus

  • La sortie de la fonction 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 un 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_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;