quantileExactWeightedInterpolated
Introduit dans : v24.10.0
Calcule le quantile d'une séquence de données numériques à l'aide d'une interpolation linéaire, en tenant compte du poids de chaque élément.
Pour obtenir la valeur interpolée, toutes les valeurs transmises sont regroupées dans un tableau, puis triées en fonction de leur poids respectif. L'interpolation du quantile est ensuite effectuée à l'aide de la méthode du percentile pondéré, en construisant une distribution cumulative basée sur les poids, puis en réalisant une interpolation linéaire à partir des poids et des valeurs pour calculer les quantiles.
Lors de l'utilisation de plusieurs fonctions quantile* avec différents niveaux dans une requête, les états internes ne sont pas combinés (autrement dit, la requête s'exécute moins efficacement qu'elle ne le pourrait).
Dans ce cas, utilisez la fonction quantiles.
Nous recommandons vivement d'utiliser quantileExactWeightedInterpolated plutôt que quantileInterpolatedWeighted, car quantileExactWeightedInterpolated est plus précise que quantileInterpolatedWeighted.
Consultez l'exemple ci-dessous pour plus de détails.
Syntaxe
quantileExactWeightedInterpolated(level)(expr, weight)Alias : medianExactWeightedInterpolated
Paramètres
level— Facultatif. Niveau du quantile. Nombre constant à virgule flottante compris entre 0 et 1. Nous recommandons d'utiliser une valeur delevelcomprise dans l'intervalle[0.01, 0.99]. Valeur par défaut : 0.5. Aveclevel=0.5, la fonction calcule la médiane.Float*
Arguments
expr— Expression sur les valeurs de la colonne renvoyant un type de données numérique,Date,DateTimeouDateTime64.(U)Int*ouInt128ouUInt128ouInt256ouUInt256ouFloat*ouDecimal*ouDateouDateTimeouDateTime64weight— Colonne contenant les poids des éléments de la séquence. Le poids correspond au nombre d'occurrences de la valeur.UInt*
Valeur renvoyée
Quantile du niveau spécifié. Les arguments numériques produisent Float64, tandis que les arguments Decimal, Date, DateTime et DateTime64 conservent leur format d'entrée. Float64 ou Decimal* ou Date ou DateTime ou DateTime64
Exemples
Calcul d'un quantile interpolé pondéré exact
CREATE TABLE t (
n Int32,
val UInt32
) ENGINE = Memory;
INSERT INTO t VALUES (0, 3), (1, 2), (2, 1), (5, 4);
SELECT quantileExactWeightedInterpolated(n, val) FROM t;┌─quantileExactWeightedInterpolated(n, val)─┐
│ 1.5 │
└───────────────────────────────────────────┘Préférez quantileExactWeightedInterpolated à quantileInterpolatedWeighted
SELECT
quantileExactWeightedInterpolated(0.99)(number, 1),
quantile(0.99)(number),
quantileInterpolatedWeighted(0.99)(number, 1)
FROM numbers(9)┌─quantileExactWeightedInterpolated(0.99)(number, 1)─┬─quantile(0.99)(number)─┬─quantileInterpolatedWeighted(0.99)(number, 1)─┐
│ 7.92 │ 7.92 │ 8 │
└────────────────────────────────────────────────────┴────────────────────────┴───────────────────────────────────────────────┘Voir aussi