ClickHouse/docs/fr/sql-reference/aggregate-functions/combinators.md
Ivan Blinkov cd14f9ebcb
SQL reference refactoring (#10857)
* split up select.md

* array-join.md basic refactoring

* distinct.md basic refactoring

* format.md basic refactoring

* from.md basic refactoring

* group-by.md basic refactoring

* having.md basic refactoring

* additional index.md refactoring

* into-outfile.md basic refactoring

* join.md basic refactoring

* limit.md basic refactoring

* limit-by.md basic refactoring

* order-by.md basic refactoring

* prewhere.md basic refactoring

* adjust operators/index.md links

* adjust sample.md links

* adjust more links

* adjust operatots links

* fix some links

* adjust aggregate function article titles

* basic refactor of remaining select clauses

* absolute paths in make_links.sh

* run make_links.sh

* remove old select.md locations

* translate docs/es

* translate docs/fr

* translate docs/fa

* remove old operators.md location

* change operators.md links

* adjust links in docs/es

* adjust links in docs/es

* minor texts adjustments

* wip

* update machine translations to use new links

* fix changelog

* es build fixes

* get rid of some select.md links

* temporary adjust ru links

* temporary adjust more ru links

* improve curly brace handling

* adjust ru as well

* fa build fix

* ru link fixes

* zh link fixes

* temporary disable part of anchor checks
2020-05-15 07:34:54 +03:00

10 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 37 Combinators

Combinateurs De Fonction D'Agrégat

Le nom d'une fonction d'agrégat peut avoir un suffixe ajouté. Cela change la façon dont la fonction d'agrégation fonctionne.

-Si

The suffix -If can be appended to the name of any aggregate function. In this case, the aggregate function accepts an extra argument a condition (Uint8 type). The aggregate function processes only the rows that trigger the condition. If the condition was not triggered even once, it returns a default value (usually zeros or empty strings).

Exemple: sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) et ainsi de suite.

Avec les fonctions d'agrégat conditionnel, vous pouvez calculer des agrégats pour plusieurs conditions à la fois, sans utiliser de sous-requêtes et JOINs. Par exemple, dans Yandex.Metrica, les fonctions d'agrégat conditionnel sont utilisées pour implémenter la fonctionnalité de comparaison de segment.

-Tableau

Le Tableau suffixe peut être ajouté à toute fonction d'agrégation. Dans ce cas, la fonction d'agrégation des arguments de la Array(T) type (tableaux) au lieu de T tapez les arguments. Si la fonction aggregate accepte plusieurs arguments, il doit s'agir de tableaux de longueurs égales. Lors du traitement des tableaux, la fonction d'agrégation fonctionne comme la fonction d'agrégation d'origine sur tous les éléments du tableau.

Exemple 1: sumArray(arr) - Totalise tous les éléments de tous arr tableau. Dans cet exemple, il aurait pu être écrit plus simplement: sum(arraySum(arr)).

Exemple 2: uniqArray(arr) Counts the number of unique elements in all arr tableau. Cela pourrait être fait d'une manière plus facile: uniq(arrayJoin(arr)) mais ce n'est pas toujours possible d'ajouter des arrayJoin pour une requête.

- Si et-tableau peut être combiné. Cependant, Array doit venir en premier, puis If. Exemple: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). En raison de cet ordre, le cond argument ne sera pas un tableau.

-État

Si vous appliquez ce combinateur, la fonction d'agrégation ne renvoie pas la valeur résultante (par exemple le nombre de valeurs uniques pour uniq la fonction), mais un état intermédiaire de l'agrégation (pour uniq, c'est la table de hachage pour calculer le nombre de valeurs uniques). C'est un AggregateFunction(...) qui peuvent être utilisés pour un traitement ultérieur ou stockés dans un tableau pour terminer l'agrégation plus tard.

Pour travailler avec ces états, utilisez:

-Fusionner

Si vous appliquez ce combinateur, la fonction d'agrégation prend l'état d'agrégation intermédiaire comme argument, combine les États pour terminer l'agrégation et renvoie la valeur résultante.

-MergeState

Fusionne les États d'agrégation intermédiaires de la même manière que le combinateur-Merge. Cependant, il ne renvoie pas la valeur résultante, mais un État d'agrégation intermédiaire, similaire au combinateur-State.

- ForEach

Convertit une fonction d'agrégation pour les tables en une fonction d'agrégation pour les tableaux qui agrège les éléments de tableau correspondants et renvoie un tableau de résultats. Exemple, sumForEach pour les tableaux [1, 2], [3, 4, 5]et[6, 7]renvoie le résultat [10, 13, 5] après avoir additionné les éléments de tableau correspondants.

- OrDefault

Modifie le comportement d'une fonction d'agrégat.

Si une fonction d'agrégation n'a pas de valeurs d'entrée, avec ce combinateur, elle renvoie la valeur par défaut pour son type de données de retour. S'applique aux fonctions d'agrégation qui peuvent prendre des données d'entrée vides.

-OrDefault peut être utilisé avec d'autres combinators.

Syntaxe

<aggFunction>OrDefault(x)

Paramètre

  • x — Aggregate function parameters.

Valeurs renvoyées

Renvoie la valeur par défaut du type de retour d'une fonction d'agrégation s'il n'y a rien à agréger.

Le Type dépend de la fonction d'agrégation utilisée.

Exemple

Requête:

SELECT avg(number), avgOrDefault(number) FROM numbers(0)

Résultat:

┌─avg(number)─┬─avgOrDefault(number)─┐
│         nan │                    0 │
└─────────────┴──────────────────────┘

Également -OrDefault peut être utilisé avec un autre combinateur. Il est utile lorsque la fonction d'agrégation n'accepte pas l'entrée vide.

Requête:

SELECT avgOrDefaultIf(x, x > 10)
FROM
(
    SELECT toDecimal32(1.23, 2) AS x
)

Résultat:

┌─avgOrDefaultIf(x, greater(x, 10))─┐
│                              0.00 │
└───────────────────────────────────┘

- OrNull

Modifie le comportement d'une fonction d'agrégat.

Ce combinateur convertit un résultat d'une fonction d'agrégation à l' Nullable type de données. Si la fonction d'agrégation n'a pas de valeurs à calculer elle renvoie NULL.

-OrNull peut être utilisé avec d'autres combinators.

Syntaxe

<aggFunction>OrNull(x)

Paramètre

  • x — Aggregate function parameters.

Valeurs renvoyées

  • Le résultat de la fonction d'agrégat, converti en Nullable type de données.
  • NULL si il n'y a rien à s'agréger.

Type: Nullable(aggregate function return type).

Exemple

Ajouter -orNull à la fin de la fonction d'agrégation.

Requête:

SELECT sumOrNull(number), toTypeName(sumOrNull(number)) FROM numbers(10) WHERE number > 10

Résultat:

┌─sumOrNull(number)─┬─toTypeName(sumOrNull(number))─┐
│              ᴺᵁᴸᴸ │ Nullable(UInt64)              │
└───────────────────┴───────────────────────────────┘

Également -OrNull peut être utilisé avec un autre combinateur. Il est utile lorsque la fonction d'agrégation n'accepte pas l'entrée vide.

Requête:

SELECT avgOrNullIf(x, x > 10)
FROM
(
    SELECT toDecimal32(1.23, 2) AS x
)

Résultat:

┌─avgOrNullIf(x, greater(x, 10))─┐
│                           ᴺᵁᴸᴸ │
└────────────────────────────────┘

-Resample

Permet de diviser les données en groupes, puis séparément agrège les données de ces groupes. Les groupes sont créés en divisant les valeurs d'une colonne en intervalles.

<aggFunction>Resample(start, end, step)(<aggFunction_params>, resampling_key)

Paramètre

  • start — Starting value of the whole required interval for resampling_key valeur.
  • stop — Ending value of the whole required interval for resampling_key valeur. L'ensemble de l'intervalle ne comprend pas les stop valeur [start, stop).
  • step — Step for separating the whole interval into subintervals. The aggFunction est exécuté sur chacun de ces sous-intervalles indépendamment.
  • resampling_key — Column whose values are used for separating data into intervals.
  • aggFunction_paramsaggFunction paramètre.

Valeurs renvoyées

  • Tableau de aggFunction les résultats pour chaque subinterval.

Exemple

Envisager l' people le tableau avec les données suivantes:

┌─name───┬─age─┬─wage─┐
│ John   │  16 │   10 │
│ Alice  │  30 │   15 │
│ Mary   │  35 │    8 │
│ Evelyn │  48 │ 11.5 │
│ David  │  62 │  9.9 │
│ Brian  │  60 │   16 │
└────────┴─────┴──────┘

Obtenons les noms des personnes dont l'âge se trouve dans les intervalles de [30,60) et [60,75). Puisque nous utilisons la représentation entière pour l'âge, nous obtenons des âges dans le [30, 59] et [60,74] intervalle.

Pour agréger des noms dans un tableau, nous utilisons grouperay fonction d'agrégation. Il faut un argument. Dans notre cas, c'est l' name colonne. Le groupArrayResample fonction devrait utiliser le age colonne pour agréger les noms par âge. Pour définir les intervalles requis, nous passons le 30, 75, 30 des arguments dans la groupArrayResample fonction.

SELECT groupArrayResample(30, 75, 30)(name, age) FROM people
┌─groupArrayResample(30, 75, 30)(name, age)─────┐
│ [['Alice','Mary','Evelyn'],['David','Brian']] │
└───────────────────────────────────────────────┘

Considérez les résultats.

Jonh est hors de l'échantillon parce qu'il est trop jeune. D'autres personnes sont distribués selon les intervalles d'âge.

Maintenant, nous allons compter le nombre total de personnes et leur salaire moyen dans les intervalles d'âge.

SELECT
    countResample(30, 75, 30)(name, age) AS amount,
    avgResample(30, 75, 30)(wage, age) AS avg_wage
FROM people
┌─amount─┬─avg_wage──────────────────┐
│ [3,2]  │ [11.5,12.949999809265137] │
└────────┴───────────────────────────┘

Article Original