> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentation des fonctions Tuple

# Fonctions Tuple

<Note>
  La documentation ci-dessous est générée à partir de la table système `system.functions`.
</Note>

{/*AUTOGENERATED_START*/}

<div id="dotProduct">
  ## dotProduct
</div>

Introduit dans : v21.11.0

Calcule le [produit scalaire](https://en.wikipedia.org/wiki/Dot_product) (ou produit interne) de deux vecteurs (tuples ou tableaux de même taille).
Renvoie la somme des produits des éléments correspondants.

**Syntaxe**

```sql theme={null}
dotProduct(vector1, vector2)
```

**Alias** : `scalarProduct`

**Arguments**

* `vector1` — Premier vecteur. [`Array(T)`](/fr/reference/data-types/array) ou [`Tuple(T)`](/fr/reference/data-types/tuple)
* `vector2` — Deuxième vecteur. Doit être de même taille que le premier vecteur. [`Array(T)`](/fr/reference/data-types/array) ou [`Tuple(T)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie le produit scalaire des deux vecteurs. [`(U)Int*`](/fr/reference/data-types/int-uint) ou [`Float*`](/fr/reference/data-types/float) ou [`Decimal`](/fr/reference/data-types/decimal)

**Exemples**

**Utilisation de base**

```sql title=Query theme={null}
SELECT dotProduct((1, 2), (3, 4))
```

```response title=Response theme={null}
11
```

<div id="flattenTuple">
  ## flattenTuple
</div>

Introduit dans : v22.6.0

Aplatit un tuple nommé et imbriqué.
Les éléments du tuple renvoyé correspondent aux chemins du tuple d’entrée.

**Syntaxe**

```sql theme={null}
flattenTuple(input)
```

**Arguments**

* `input` — Tuple nommé et imbriqué à aplatir. [`Tuple(n1 T1[, n2 T2, ... ])`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple de sortie dont les éléments correspondent aux chemins de l'entrée d'origine. [`Tuple(T)`](/fr/reference/data-types/tuple)

**Exemples**

**Exemple d'utilisation**

```sql title=Query theme={null}
CREATE TABLE tab(t Tuple(a UInt32, b Tuple(c String, d UInt32))) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO tab VALUES ((3, ('c', 4)));

SELECT flattenTuple(t) FROM tab;
```

```response title=Response theme={null}
┌─flattenTuple(t)┐
│ (3, 'c', 4)    │
└────────────────┘
```

<div id="tuple">
  ## tuple
</div>

Introduit dans : v1.1.0

Renvoie un tuple en regroupant les arguments d’entrée.

Pour les colonnes C1, C2, ... de types T1, T2, ..., la fonction renvoie un tuple de type nommé Tuple(C1 T1, C2 T2, ...) contenant ces colonnes si leurs noms sont uniques et peuvent être interprétés comme des identifiants non quotés ; sinon, elle renvoie un Tuple(T1, T2, ...). L’exécution de la fonction n’entraîne aucun coût.
Les tuples sont généralement utilisés comme valeurs intermédiaires pour un argument des opérateurs IN, ou pour créer une liste de paramètres formels de fonctions lambda. Les tuples ne peuvent pas être écrits dans une table.

La fonction implémente l’opérateur `(x, y, ...)`.

**Syntaxe**

```sql theme={null}
tuple([t1[, t2[ ...]])
```

**Arguments**

* Aucun.

**Valeur renvoyée**

**Exemples**

**typique**

```sql title=Query theme={null}
SELECT tuple(1, 2)
```

```response title=Response theme={null}
(1,2)
```

<div id="tupleConcat">
  ## tupleConcat
</div>

Introduit dans : v23.8.0

Concatène les tuples passés en arguments.

**Syntaxe**

```sql theme={null}
tupleConcat(tuple1[, tuple2, [...]])
```

**Arguments**

* `tupleN` — Nombre arbitraire d’arguments de type Tuple. [`Tuple(T)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple contenant tous les éléments des tuples en entrée. [`Tuple(T)`](/fr/reference/data-types/tuple)

**Exemples**

**Exemple d’utilisation**

```sql title=Query theme={null}
SELECT tupleConcat((1, 2), ('a',), (true, false))
```

```response title=Response theme={null}
(1, 2, 'a', true, false)
```

<div id="tupleDivide">
  ## tupleDivide
</div>

Introduit dans : v21.11.0

Calcule la division élément par élément de deux tuples de même taille ou plus, en l’appliquant de gauche à droite.

<Note>
  Une division par zéro renvoie `inf`.
</Note>

**Syntaxe**

```sql theme={null}
tupleDivide(t1, t2[, tN, ...])
```

**Arguments**

* `t1` — Premier tuple en entrée. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `t2, ..., tN` — Un ou plusieurs tuples supplémentaires en entrée. Tous les tuples doivent avoir la même taille. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple contenant les quotients calculés élément par élément. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Deux tuples**

```sql title=Query theme={null}
SELECT tupleDivide((1, 2), (2, 3))
```

```response title=Response theme={null}
(0.5, 0.6666666666666666)
```

**Trois tuples**

```sql title=Query theme={null}
SELECT tupleDivide((100.0, 60.0), (5.0, 3.0), (2.0, 4.0))
```

```response title=Response theme={null}
(10, 5)
```

<div id="tupleDivideByNumber">
  ## tupleDivideByNumber
</div>

Introduit dans : v21.11.0

Renvoie un tuple dont chaque élément est divisé par un nombre.

<Note>
  Une division par zéro renverra `inf`.
</Note>

**Syntaxe**

```sql theme={null}
tupleDivideByNumber(tuple, number)
```

**Arguments**

* `tuple` — Tuple à diviser. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `number` — Diviseur. [`(U)Int*`](/fr/reference/data-types/int-uint) ou [`Float*`](/fr/reference/data-types/float) ou [`Decimal`](/fr/reference/data-types/decimal)

**Valeur renvoyée**

Renvoie un tuple contenant les éléments divisés. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Utilisation de base**

```sql title=Query theme={null}
SELECT tupleDivideByNumber((1, 2), 0.5)
```

```response title=Response theme={null}
(2, 4)
```

<div id="tupleElement">
  ## tupleElement
</div>

Introduit dans : v1.1.0

Extrait un élément d'un tuple par index ou par nom.

Pour l'accès par index, un index numérique basé sur 1 est attendu.
Pour l'accès par nom, le nom de l'élément peut être fourni sous forme de chaîne (fonctionne uniquement pour les tuples nommés).

Les index négatifs sont pris en charge. Dans ce cas, l'élément correspondant est sélectionné en comptant depuis la fin. Par exemple, `tuple.-1` est le dernier élément du tuple.

Un troisième argument facultatif spécifie une valeur par défaut, qui est renvoyée au lieu de lever une exception lorsque l'élément demandé n'existe pas.
Tous les arguments doivent être des constantes.

Cette fonction n'a aucun coût à l'exécution et implémente les opérateurs `x.index` et `x.name`.

**Syntaxe**

```sql theme={null}
tupleElement(tuple, index|name[, default_value])
```

**Arguments**

* `tuple` — Un tuple ou un tableau de tuples. [`Tuple(T)`](/fr/reference/data-types/tuple) ou [`Array(Tuple(T))`](/fr/reference/data-types/array)
* `index` — Indice de colonne, à partir de 1. [`const UInt8/16/32/64`](/fr/reference/data-types/int-uint)
* `name` — Nom de l’élément. [`const String`](/fr/reference/data-types/string)
* `default_value` — Valeur par défaut renvoyée lorsque l’indice est hors limites ou que l’élément n’existe pas. [`Any`](/fr/reference/data-types/index)

**Valeur renvoyée**

Renvoie l’élément à l’indice ou au nom spécifié. [`Any`](/fr/reference/data-types/index)

**Exemples**

**Accès par index**

```sql title=Query theme={null}
SELECT tupleElement((1, 'hello'), 2)
```

```response title=Response theme={null}
hello
```

**Indexation avec indices négatifs**

```sql title=Query theme={null}
SELECT tupleElement((1, 'hello'), -1)
```

```response title=Response theme={null}
hello
```

**Tuple nommé avec une table**

```sql title=Query theme={null}
CREATE TABLE example (values Tuple(name String, age UInt32)) ENGINE = Memory;
INSERT INTO example VALUES (('Alice', 30));
SELECT tupleElement(values, 'name') FROM example;
```

```response title=Response theme={null}
Alice
```

**Avec une valeur par défaut**

```sql title=Query theme={null}
SELECT tupleElement((1, 2), 5, 'not_found')
```

```response title=Response theme={null}
not_found
```

**Syntaxe de l’opérateur**

```sql title=Query theme={null}
SELECT (1, 'hello').2
```

```response title=Response theme={null}
hello
```

<div id="tupleHammingDistance">
  ## tupleHammingDistance
</div>

Introduit dans : v21.1.0

Renvoie la [distance de Hamming](https://en.wikipedia.org/wiki/Hamming_distance) entre deux tuples de même taille.

<Note>
  Le type du résultat est déterminé de la même manière que pour les [fonctions arithmétiques](/fr/reference/functions/regular-functions/arithmetic-functions), en fonction du nombre d'éléments des tuples d'entrée.

  ```sql theme={null}
  SELECT
      toTypeName(tupleHammingDistance(tuple(0), tuple(0))) AS t1,
      toTypeName(tupleHammingDistance((0, 0), (0, 0))) AS t2,
      toTypeName(tupleHammingDistance((0, 0, 0), (0, 0, 0))) AS t3,
      toTypeName(tupleHammingDistance((0, 0, 0, 0), (0, 0, 0, 0))) AS t4,
      toTypeName(tupleHammingDistance((0, 0, 0, 0, 0), (0, 0, 0, 0, 0))) AS t5
  ```

  ```text theme={null}
  ┌─t1────┬─t2─────┬─t3─────┬─t4─────┬─t5─────┐
  │ UInt8 │ UInt16 │ UInt32 │ UInt64 │ UInt64 │
  └───────┴────────┴────────┴────────┴────────┘
  ```
</Note>

**Syntaxe**

```sql theme={null}
tupleHammingDistance(t1, t2)
```

**Arguments**

* `t1` — Premier tuple. [`Tuple(*)`](/fr/reference/data-types/tuple)
* `t2` — Deuxième tuple. [`Tuple(*)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie la distance de Hamming. [`UInt8/16/32/64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple d'utilisation**

```sql title=Query theme={null}
SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1))
```

```response title=Response theme={null}
2
```

**Avec MinHash pour détecter les chaînes semi-dupliquées**

```sql title=Query theme={null}
SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) FROM (SELECT 'ClickHouse is a column-oriented database management system for online analytical processing of queries.' AS string)
```

```response title=Response theme={null}
2
```

<div id="tupleIntDiv">
  ## tupleIntDiv
</div>

Introduit dans : v23.8.0

Effectue la division entière élément par élément de deux tuples ou plus de même taille, de gauche à droite. Renvoie un tuple de quotients.
Si un tuple contient des éléments non entiers, le résultat est calculé en arrondissant chaque numérateur ou diviseur non entier à l'entier le plus proche.
Une division par 0 entraîne une exception.

**Syntaxe**

```sql theme={null}
tupleIntDiv(t1, t2[, tN, ...])
```

**Arguments**

* `t1` — Premier tuple en entrée. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `t2, ..., tN` — Un ou plusieurs tuples en entrée supplémentaires. Tous les tuples doivent avoir la même taille. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple de quotients entiers. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Deux tuples**

```sql title=Query theme={null}
SELECT tupleIntDiv((15, 10, 5), (5, 5, 5))
```

```response title=Response theme={null}
(3, 2, 1)
```

**Avec des valeurs Decimal**

```sql title=Query theme={null}
SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5))
```

```response title=Response theme={null}
(2, 1, 0)
```

**Trois tuples**

```sql title=Query theme={null}
SELECT tupleIntDiv((120, 60), (4, 3), (2, 4))
```

```response title=Response theme={null}
(15, 5)
```

<div id="tupleIntDivByNumber">
  ## tupleIntDivByNumber
</div>

Introduit dans : v23.8.0

Effectue la division entière d'un tuple de numérateurs par un dénominateur donné et renvoie un tuple de quotients.
Si l'un des paramètres d'entrée contient des éléments non entiers, le résultat est calculé en arrondissant à l'entier le plus proche chaque numérateur ou diviseur non entier.
Une erreur est levée en cas de division par 0.

**Syntaxe**

```sql theme={null}
tupleIntDivByNumber(tuple_num, div)
```

**Arguments**

* `tuple_num` — Tuple de valeurs du numérateur. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `div` — La valeur du diviseur. [`(U)Int*`](/fr/reference/data-types/int-uint) ou [`Float*`](/fr/reference/data-types/float) ou [`Decimal`](/fr/reference/data-types/decimal)

**Valeur renvoyée**

Renvoie un tuple contenant les quotients. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Utilisation de base**

```sql title=Query theme={null}
SELECT tupleIntDivByNumber((15, 10, 5), 5)
```

```response title=Response theme={null}
(3, 2, 1)
```

**Avec des valeurs Decimal**

```sql title=Query theme={null}
SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8)
```

```response title=Response theme={null}
(2, 1, 0)
```

<div id="tupleIntDivOrZero">
  ## tupleIntDivOrZero
</div>

Introduit dans : v23.8.0

Comme [`tupleIntDiv`](#tupleIntDiv), effectue une division entière élément par élément sur deux tuples ou plus de même taille, en l'appliquant de gauche à droite.
En cas de division par 0, renvoie 0 pour l'élément concerné au lieu de lever une exception.
Si un tuple contient des éléments non entiers, le résultat est calculé en arrondissant à l'entier le plus proche chaque numérateur ou diviseur non entier.

**Syntaxe**

```sql theme={null}
tupleIntDivOrZero(t1, t2[, tN, ...])
```

**Arguments**

* `t1` — Premier tuple d’entrée. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `t2, ..., tN` — Un ou plusieurs tuples d’entrée supplémentaires. Tous les tuples doivent avoir la même longueur. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple de quotients entiers, avec 0 pour chaque élément dont le diviseur est 0. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Avec des diviseurs nuls**

```sql title=Query theme={null}
SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0))
```

```response title=Response theme={null}
(0, 0, 0)
```

**Trois tuples**

```sql title=Query theme={null}
SELECT tupleIntDivOrZero((120, 60), (4, 3), (2, 4))
```

```response title=Response theme={null}
(15, 5)
```

<div id="tupleIntDivOrZeroByNumber">
  ## tupleIntDivOrZeroByNumber
</div>

Introduit dans : v23.8.0

Comme [`tupleIntDivByNumber`](#tupleIntDivByNumber), cette fonction effectue la division entière d’un Tuple de numérateurs par un dénominateur donné et renvoie un Tuple de quotients.
Elle ne génère pas d’erreur en cas de diviseur nul, mais renvoie à la place un quotient de zéro.
Si le Tuple ou le diviseur contient des éléments non entiers, le résultat est calculé en arrondissant chaque numérateur ou diviseur non entier à l’entier le plus proche.

**Syntaxe**

```sql theme={null}
tupleIntDivOrZeroByNumber(tuple_num, div)
```

**Arguments**

* `tuple_num` — Tuple des valeurs du numérateur. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `div` — La valeur du diviseur. [`(U)Int*`](/fr/reference/data-types/int-uint) ou [`Float*`](/fr/reference/data-types/float) ou [`Decimal`](/fr/reference/data-types/decimal)

**Valeur renvoyée**

Renvoie un tuple des quotients, avec `0` pour ceux dont le diviseur est `0`. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Utilisation de base**

```sql title=Query theme={null}
SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5)
```

```response title=Response theme={null}
(3, 2, 1)
```

**Avec un diviseur égal à zéro**

```sql title=Query theme={null}
SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0)
```

```response title=Response theme={null}
(0, 0, 0)
```

<div id="tupleMinus">
  ## tupleMinus
</div>

Introduit dans : v21.11.0

Calcule, de gauche à droite, la différence élément par élément entre deux tuples ou plus de même taille.

**Syntaxe**

```sql theme={null}
tupleMinus(t1, t2[, tN, ...])
```

**Alias** : `vectorDifference`

**Arguments**

* `t1` — Premier tuple en entrée. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `t2, ..., tN` — Un ou plusieurs tuples en entrée supplémentaires. Tous les tuples doivent avoir la même taille. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple contenant les différences élément par élément. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Deux tuples**

```sql title=Query theme={null}
SELECT tupleMinus((1, 2), (2, 3))
```

```response title=Response theme={null}
(-1, -1)
```

**Trois tuples**

```sql title=Query theme={null}
SELECT tupleMinus((10, 10), (3, 4), (2, 1))
```

```response title=Response theme={null}
(5, 5)
```

<div id="tupleModulo">
  ## tupleModulo
</div>

Introduit dans : v23.8.0

Renvoie un tuple de restes calculés élément par élément en divisant deux tuples ou plus de même taille, de gauche à droite.

**Syntaxe**

```sql theme={null}
tupleModulo(t1, t2[, tN, ...])
```

**Arguments**

* `t1` — Premier tuple en entrée. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `t2, ..., tN` — Un ou plusieurs tuples en entrée supplémentaires. Tous les tuples doivent avoir la même taille. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple de restes calculés élément par élément. Une exception est levée en cas de division par zéro. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Deux tuples**

```sql title=Query theme={null}
SELECT tupleModulo((15, 10, 5), (5, 3, 2))
```

```response title=Response theme={null}
(0, 1, 1)
```

**Trois tuples**

```sql title=Query theme={null}
SELECT tupleModulo((10, 20), (7, 9), (3, 5))
```

```response title=Response theme={null}
(0, 2)
```

<div id="tupleModuloByNumber">
  ## tupleModuloByNumber
</div>

Introduit dans : v23.8.0

Renvoie un tuple des modulos (restes) des divisions d'un tuple par un diviseur donné.

**Syntaxe**

```sql theme={null}
tupleModuloByNumber(tuple_num, div)
```

**Arguments**

* `tuple_num` — Tuple des éléments du numérateur. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `div` — La valeur du diviseur. [`(U)Int*`](/fr/reference/data-types/int-uint) ou [`Float*`](/fr/reference/data-types/float) ou [`Decimal`](/fr/reference/data-types/decimal)

**Valeur renvoyée**

Renvoie un tuple contenant les restes de la division. Une erreur est générée en cas de division par zéro. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Utilisation de base**

```sql title=Query theme={null}
SELECT tupleModuloByNumber((15, 10, 5), 2)
```

```response title=Response theme={null}
(1, 0, 1)
```

<div id="tupleMultiply">
  ## tupleMultiply
</div>

Introduit dans : v21.11.0

Calcule le produit élément par élément de deux tuples ou plus de même taille.

**Syntaxe**

```sql theme={null}
tupleMultiply(t1, t2[, tN, ...])
```

**Arguments**

* `t1` — Premier tuple d'entrée. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `t2, ..., tN` — Un ou plusieurs tuples d'entrée supplémentaires. Tous les tuples doivent avoir la même taille. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple contenant les produits élément par élément. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Deux tuples**

```sql title=Query theme={null}
SELECT tupleMultiply((1, 2), (2, 3))
```

```response title=Response theme={null}
(2, 6)
```

**Trois tuples**

```sql title=Query theme={null}
SELECT tupleMultiply((1, 2), (2, 3), (1, 2))
```

```response title=Response theme={null}
(2, 12)
```

<div id="tupleMultiplyByNumber">
  ## tupleMultiplyByNumber
</div>

Introduit dans : v21.11.0

Renvoie un tuple dont tous les éléments sont multipliés par un nombre.

**Syntaxe**

```sql theme={null}
tupleMultiplyByNumber(tuple, number)
```

**Arguments**

* `tuple` — Tuple à multiplier. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `number` — Multiplicateur. [`(U)Int*`](/fr/reference/data-types/int-uint) ou [`Float*`](/fr/reference/data-types/float) ou [`Decimal`](/fr/reference/data-types/decimal)

**Valeur renvoyée**

Renvoie un tuple dont les éléments sont multipliés. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Utilisation de base**

```sql title=Query theme={null}
SELECT tupleMultiplyByNumber((1, 2), -2.1)
```

```response title=Response theme={null}
(-2.1, -4.2)
```

<div id="tupleNames">
  ## tupleNames
</div>

Introduit dans : v24.8.0

Convertit un tuple en tableau de noms de colonnes. Pour un tuple de la forme `Tuple(a T, b T, ...)`, renvoie un tableau de chaînes de caractères représentant les noms des colonnes du tuple. Si les éléments du tuple n'ont pas de noms explicites, leurs indices sont utilisés à la place comme noms de colonnes.

**Syntaxe**

```sql theme={null}
tupleNames(tuple)
```

**Arguments**

* Aucun.

**Valeur renvoyée**

**Exemples**

**typique**

```sql title=Query theme={null}
SELECT tupleNames(tuple(1 as a, 2 as b))
```

```response title=Response theme={null}
['a','b']
```

<div id="tupleNegate">
  ## tupleNegate
</div>

Introduit dans : v21.11.0

Calcule l’opposé des éléments du tuple.

**Syntaxe**

```sql theme={null}
tupleNegate(t)
```

**Arguments**

* `t` — Tuple dont il faut prendre l'opposé. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple contenant le résultat de la négation. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Utilisation de base**

```sql title=Query theme={null}
SELECT tupleNegate((1, 2))
```

```response title=Response theme={null}
(-1, -2)
```

<div id="tuplePlus">
  ## tuplePlus
</div>

Introduit dans : v21.11.0

Calcule la somme élément par élément de deux tuples ou plus de taille identique.

**Syntaxe**

```sql theme={null}
tuplePlus(t1, t2[, tN, ...])
```

**Alias** : `vectorSum`

**Arguments**

* `t1` — Premier tuple en entrée. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `t2, ..., tN` — Un ou plusieurs tuples en entrée supplémentaires. Tous les tuples doivent avoir la même taille. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tuple contenant les sommes calculées élément par élément. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Deux tuples**

```sql title=Query theme={null}
SELECT tuplePlus((1, 2), (2, 3))
```

```response title=Response theme={null}
(3, 5)
```

**Trois tuples**

```sql title=Query theme={null}
SELECT tuplePlus((1, 2), (2, 3), (3, 4))
```

```response title=Response theme={null}
(6, 9)
```

<div id="tuplePositiveModuloByNumber">
  ## tuplePositiveModuloByNumber
</div>

Introduit dans : v26.4.0

Renvoie un tuple des modulos positifs (restes) des divisions d'un tuple par un diviseur donné.
Contrairement à tupleModuloByNumber, le résultat est toujours non négatif.

**Syntaxe**

```sql theme={null}
tuplePositiveModuloByNumber(tuple_num, div)
```

**Arguments**

* `tuple_num` — Tuple contenant les valeurs du numérateur. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)
* `div` — La valeur du diviseur. [`(U)Int*`](/fr/reference/data-types/int-uint) ou [`Float*`](/fr/reference/data-types/float) ou [`Decimal`](/fr/reference/data-types/decimal)

**Valeur renvoyée**

Renvoie un tuple de restes non négatifs. [`Tuple((U)Int*)`](/fr/reference/data-types/tuple) ou [`Tuple(Float*)`](/fr/reference/data-types/tuple) ou [`Tuple(Decimal)`](/fr/reference/data-types/tuple)

**Exemples**

**Utilisation de base**

```sql title=Query theme={null}
SELECT tuplePositiveModuloByNumber((15, 10, 5), 2)
```

```response title=Response theme={null}
(1, 0, 1)
```

<div id="tupleToNameValuePairs">
  ## tupleToNameValuePairs
</div>

Introduit dans : v21.9.0

Convertit un tuple en un tableau de paires `(nom, valeur)`.
Par exemple, le tuple `Tuple(n1 T1, n2 T2, ...)` est converti en `Array(Tuple('n1', T1), Tuple('n2', T2), ...)`.
Toutes les valeurs du tuple doivent être du même type.

**Syntaxe**

```sql theme={null}
tupleToNameValuePairs(tuple)
```

**Arguments**

* `tuple` — tuple nommé contenant des valeurs de tout type. [`Tuple(n1 T1[, n2 T2, ...])`](/fr/reference/data-types/tuple)

**Valeur renvoyée**

Renvoie un tableau de paires `(name, value)`. [`Array(Tuple(String, T))`](/fr/reference/data-types/array)

**Exemples**

**tuple nommé**

```sql title=Query theme={null}
SELECT tupleToNameValuePairs(tuple(1593 AS user_ID, 2502 AS session_ID))
```

```response title=Response theme={null}
[('1', 1593), ('2', 2502)]
```

**Tuple non nommé**

```sql title=Query theme={null}
SELECT tupleToNameValuePairs(tuple(3, 2, 1))
```

```response title=Response theme={null}
[('1', 3), ('2', 2), ('3', 1)]
```

<div id="untuple">
  ## untuple
</div>

Effectue une substitution syntaxique des éléments [tuple](/fr/reference/data-types/tuple) dans l’appel.

Les noms des colonnes du résultat dépendent de l’implémentation et peuvent changer. Ne supposez pas de noms de colonnes spécifiques après `untuple`.

**Syntaxe**

```sql theme={null}
untuple(x)
```

Vous pouvez utiliser l’expression `EXCEPT` pour exclure des colonnes du résultat de la requête.

**Arguments**

* `x` — Une fonction `tuple`, une colonne ou un tuple d’éléments. [Tuple](/fr/reference/data-types/tuple).

**Valeur renvoyée**

* Aucune.

**Exemples**

Table d’entrée :

```text theme={null}
┌─key─┬─v1─┬─v2─┬─v3─┬─v4─┬─v5─┬─v6────────┐
│   1 │ 10 │ 20 │ 40 │ 30 │ 15 │ (33,'ab') │
│   2 │ 25 │ 65 │ 70 │ 40 │  6 │ (44,'cd') │
│   3 │ 57 │ 30 │ 20 │ 10 │  5 │ (55,'ef') │
│   4 │ 55 │ 12 │  7 │ 80 │ 90 │ (66,'gh') │
│   5 │ 30 │ 50 │ 70 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴────┴────┴───────────┘
```

Exemple d’utilisation d’une colonne de type `Tuple` comme paramètre de la fonction `untuple` :

```sql title="Query" theme={null}
SELECT untuple(v6) FROM kv;
```

```text title="Response" theme={null}
┌─_ut_1─┬─_ut_2─┐
│    33 │ ab    │
│    44 │ cd    │
│    55 │ ef    │
│    66 │ gh    │
│    77 │ kl    │
└───────┴───────┘
```

Exemple d’utilisation d’une expression `EXCEPT` :

```sql title="Query" theme={null}
SELECT untuple((* EXCEPT (v2, v3),)) FROM kv;
```

```text title="Response" theme={null}
┌─key─┬─v1─┬─v4─┬─v5─┬─v6────────┐
│   1 │ 10 │ 30 │ 15 │ (33,'ab') │
│   2 │ 25 │ 40 │  6 │ (44,'cd') │
│   3 │ 57 │ 10 │  5 │ (55,'ef') │
│   4 │ 55 │ 80 │ 90 │ (66,'gh') │
│   5 │ 30 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴───────────┘
```

<div id="distance-functions">
  ## Fonctions de distance
</div>

Toutes les fonctions prises en charge sont décrites dans la [documentation sur les fonctions de distance](/fr/reference/functions/regular-functions/distance-functions).
