PERCENTILE_ CONT fonction - AWS Clean Rooms

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

PERCENTILE_ CONT fonction

PERCENTILE_ CONT est une fonction de distribution inverse qui suppose un modèle de distribution continue. Elle prend une valeur de centile et une spécification de tri, et renvoie une valeur interpolée qui entre dans la catégorie de la valeur de centile donnée en ce qui concerne la spécification de tri.

PERCENTILE_ CONT calcule une interpolation linéaire entre les valeurs après les avoir ordonnées. A l’aide de la valeur de centile (P) et le nombre de lignes non null (N) dans le groupe d’agrégation, la fonction calcule le nombre de lignes après l’ordonnancement des lignes en fonction de la spécification de tri. Ce nombre de lignes (RN) est calculé selon la formule RN = (1+ (P*(N-1)). Le résultat de la fonction d’agrégation est calculé par interpolation linéaire entre les valeurs des lignes aux numéros de ligne CRN = CEILING(RN) et FRN = FLOOR(RN).

Le résultat final sera le suivant.

Si (CRN = FRN = RN) le résultat est (value of expression from row at RN)

Sinon, le résultat est le suivant :

(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN).

PERCENTILE_ CONT est une fonction réservée aux nœuds de calcul. La fonction renvoie une erreur si la requête ne fait pas référence à une table définie par l'utilisateur ou à une table AWS Clean Rooms système.

Syntaxe

PERCENTILE_CONT ( percentile ) WITHIN GROUP (ORDER BY expr)

Arguments

percentile

Constante numérique comprise entre 0 et 1. Les valeurs NULL sont ignorées dans le calcul.

WITHINGROUP(ORDERPAR expr)

Spécifie les valeurs numériques ou de date/heure au-delà desquelles trier et calculer le centile.

Renvoie

Le type de retour est déterminé par le type de données de l'expression ORDER BY dans la WITHIN GROUP clause. Le tableau suivant indique le type de retour pour chaque type de données d'expression ORDER BY.

Type d’entrée Type de retour
SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL DECIMAL
FLOAT, DOUBLE DOUBLE
DATE DATE
TIMESTAMP TIMESTAMP
TIMESTAMPTZ TIMESTAMPTZ

Notes d’utilisation

Si l'expression ORDER BY est un type de DECIMAL données défini avec une précision maximale de 38 chiffres, il est possible que PERCENTILE _ CONT renvoie un résultat inexact ou une erreur. Si la valeur renvoyée par la CONT fonction PERCENTILE _ dépasse 38 chiffres, le résultat est tronqué pour être ajusté, ce qui entraîne une perte de précision. Si, au cours de l’interpolation, un résultat intermédiaire dépasse la précision maximale, un dépassement de capacité numérique se produit et la fonction renvoie une erreur. Pour éviter ces conditions, nous vous recommandons d'utiliser un type de données de moindre précision ou de convertir l'expression ORDER BY en une précision inférieure.

Si une instruction inclut plusieurs appels à des fonctions d'agrégation basées sur le tri (LISTAGGCONT, PERCENTILE _ ouMEDIAN), elles doivent toutes utiliser les mêmes valeurs ORDER BY. Notez qu'un ordre implicite est MEDIAN appliqué en fonction de la valeur de l'expression.

Par exemple, l’instruction suivante renvoie une erreur.

select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (pricepaid) from sales group by salesid, pricepaid; An error occurred when executing the SQL command: select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (pricepaid) from sales group by salesid, pricepai... ERROR: within group ORDER BY clauses for aggregate functions must be the same

L’instruction suivante s’exécute avec succès.

select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (salesid) from sales group by salesid, pricepaid;

Exemples

L'exemple suivant montre que cela MEDIAN produit les mêmes résultats que PERCENTILE _ CONT (0,5).

select top 10 distinct sellerid, qtysold, percentile_cont(0.5) within group (order by qtysold), median (qtysold) from sales group by sellerid, qtysold; sellerid | qtysold | percentile_cont | median ---------+---------+-----------------+------- 1 | 1 | 1.0 | 1.0 2 | 3 | 3.0 | 3.0 5 | 2 | 2.0 | 2.0 9 | 4 | 4.0 | 4.0 12 | 1 | 1.0 | 1.0 16 | 1 | 1.0 | 1.0 19 | 2 | 2.0 | 2.0 19 | 3 | 3.0 | 3.0 22 | 2 | 2.0 | 2.0 25 | 2 | 2.0 | 2.0