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

> Документация по функциям Tuple

# Функции Tuple

<Note>
  Приведённая ниже документация сгенерирована на основе системной таблицы `system.functions`.
</Note>

{/*AUTOGENERATED_START*/}

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

Добавленный в: v21.11.0

Вычисляет [скалярное произведение](https://en.wikipedia.org/wiki/Dot_product) двух векторов (кортежей или массивов одинакового размера).
Возвращает сумму произведений соответствующих элементов.

**Синтаксис**

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

**Псевдонимы**: `scalarProduct`

**Аргументы**

* `vector1` — Первый вектор. [`Array(T)`](/ru/reference/data-types/array) или [`Tuple(T)`](/ru/reference/data-types/tuple)
* `vector2` — Второй вектор. Должен быть того же размера, что и первый. [`Array(T)`](/ru/reference/data-types/array) или [`Tuple(T)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает скалярное произведение двух векторов. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal`](/ru/reference/data-types/decimal)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v22.6.0

Преобразует именованный вложенный кортеж в плоский.
Элементами возвращаемого кортежа являются пути входного кортежа.

**Синтаксис**

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

**Аргументы**

* `input` — Именованный вложенный кортеж, который нужно развернуть. [`Tuple(n1 T1[, n2 T2, ... ])`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает выходной кортеж, элементы которого представляют собой пути из исходного входного значения. [`Tuple(T)`](/ru/reference/data-types/tuple)

**Примеры**

**Пример использования**

```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>

Добавленный в: v1.1.0

Возвращает кортеж, объединяя входные аргументы.

Для столбцов C1, C2, ... с типами T1, T2, ... возвращается кортеж именованного типа Tuple(C1 T1, C2 T2, ...), содержащий эти столбцы, если их имена уникальны и могут использоваться как идентификаторы без кавычек; в противном случае возвращается Tuple(T1, T2, ...). Выполнение этой функции не требует дополнительных затрат.
Tuple обычно используются как промежуточные значения для аргументов операторов IN или для создания списка формальных параметров лямбда-функций. Tuple нельзя записывать в таблицу.

Функция реализует оператор `(x, y, ...)`.

**Синтаксис**

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

**Аргументы**

* Отсутствуют.

**Возвращаемое значение**

**Примеры**

**обычный**

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

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

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

Добавленный в: v23.8.0

Объединяет кортежи, переданные в качестве аргументов.

**Синтаксис**

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

**Аргументы**

* `tupleN` — Произвольное количество аргументов типа Tuple. [`Tuple(T)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает кортеж, содержащий все элементы входных кортежей. [`Tuple(T)`](/ru/reference/data-types/tuple)

**Примеры**

**Пример использования**

```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>

Добавленный в: v21.11.0

Вычисляет результат деления соответствующих элементов двух кортежей одинакового размера.

<Note>
  При делении на ноль возвращается `inf`.
</Note>

**Синтаксис**

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

**Аргументы**

* `t1` — Первый кортеж. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `t2` — Второй кортеж. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает кортеж с результатом деления. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v21.11.0

Возвращает кортеж, все элементы которого разделены на число.

<Note>
  Деление на ноль вернёт `inf`.
</Note>

**Синтаксис**

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

**Аргументы**

* `tuple` — Кортеж для деления. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `number` — Делитель. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal`](/ru/reference/data-types/decimal)

**Возвращаемое значение**

Возвращает кортеж с элементами, полученными в результате деления. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v1.1.0

Извлекает элемент из Tuple по индексу или имени.

Для доступа по индексу ожидается числовой индекс, начиная с 1.
Для доступа по имени имя элемента можно указать в виде строки (работает только для именованных Tuple).

Поддерживаются отрицательные индексы. В этом случае выбирается соответствующий элемент с нумерацией от конца. Например, `tuple.-1` — это последний элемент в Tuple.

Необязательный третий аргумент задает значение по умолчанию, которое возвращается вместо того, чтобы генерировать исключение, если запрашиваемый элемент не существует.
Все аргументы должны быть константами.

Эта функция не имеет накладных расходов во время выполнения и реализует операторы `x.index` и `x.name`.

**Синтаксис**

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

**Аргументы**

* `tuple` — Кортеж или массив кортежей. [`Tuple(T)`](/ru/reference/data-types/tuple) или [`Array(Tuple(T))`](/ru/reference/data-types/array)
* `index` — Индекс столбца, нумерация с 1. [`const UInt8/16/32/64`](/ru/reference/data-types/int-uint)
* `name` — Имя элемента. [`const String`](/ru/reference/data-types/string)
* `default_value` — Значение по умолчанию, возвращаемое, если индекс выходит за границы или элемент отсутствует. [`Any`](/ru/reference/data-types)

**Возвращаемое значение**

Возвращает элемент по указанному индексу или имени. [`Any`](/ru/reference/data-types)

**Примеры**

**Доступ по индексу**

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

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

**Индексация с отрицательными индексами**

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

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

**Именованный кортеж с таблицей**

```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
```

**Со значением по умолчанию**

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

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

**Синтаксис оператора**

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

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

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

Добавленный в: v21.1.0

Возвращает [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между двумя кортежами одинаковой длины.

<Note>
  Тип результата определяется так же, как для [арифметических функций](/ru/reference/functions/regular-functions/arithmetic-functions), на основе количества элементов во входных кортежах.

  ```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>

**Синтаксис**

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

**Аргументы**

* `t1` — Первый кортеж. [`Tuple(*)`](/ru/reference/data-types/tuple)
* `t2` — Второй кортеж. [`Tuple(*)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает расстояние Хэмминга. [`UInt8/16/32/64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример использования**

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

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

**С MinHash для обнаружения почти одинаковых строк**

```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>

Добавленный в: v23.8.0

Выполняет целочисленное деление кортежа числителей на кортеж знаменателей. Возвращает кортеж частных.
Если хотя бы один из кортежей содержит нецелочисленные элементы, результат вычисляется с округлением каждого нецелочисленного числителя или делителя до ближайшего целого.
При делении на 0 генерируется ошибка.

**Синтаксис**

```sql theme={null}
tupleIntDiv(tuple_num, tuple_div)
```

**Аргументы**

* `tuple_num` — Кортеж значений числителя. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `tuple_div` — Кортеж значений делителя. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает кортеж частных. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

**С десятичными дробями**

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

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

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

Добавленный в: v23.8.0

Выполняет целочисленное деление кортежа числителей на заданный знаменатель и возвращает кортеж частных.
Если один из входных параметров содержит нецелые элементы, результат вычисляется с округлением до ближайшего целого для каждого нецелого числителя или делителя.
При делении на 0 будет сгенерировано исключение.

**Синтаксис**

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

**Аргументы**

* `tuple_num` — Кортеж значений делимого. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `div` — Значение делителя. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal`](/ru/reference/data-types/decimal)

**Возвращаемое значение**

Возвращает кортеж частных. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

**С десятичными числами**

```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>

Добавленный в: v23.8.0

Как и [`tupleIntDiv`](#tupleIntDiv), выполняет целочисленное деление кортежа числителей на кортеж знаменателей и возвращает кортеж частных.
В случае деления на 0 возвращает частное 0 вместо того, чтобы генерировать исключение.
Если любой из кортежей содержит нецелочисленные элементы, результат вычисляется путем округления каждого нецелочисленного числителя или делителя до ближайшего целого числа.

**Синтаксис**

```sql theme={null}
tupleIntDivOrZero(tuple_num, tuple_div)
```

**Аргументы**

* `tuple_num` — Tuple значений делимого. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `tuple_div` — Tuple значений делителя. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает Tuple частных. Для частных, где делитель равен 0, возвращает 0. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**С нулевыми делителями**

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

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

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

Добавленный в: v23.8.0

Как и [`tupleIntDivByNumber`](#tupleIntDivByNumber), выполняет целочисленное деление кортежа числителей на заданный делитель и возвращает кортеж частных.
При делении на ноль не вызывает ошибку, а вместо этого возвращает нулевое частное.
Если кортеж или `div` содержат нецелочисленные элементы, результат вычисляется с округлением каждого нецелочисленного числителя или делителя до ближайшего целого.

**Синтаксис**

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

**Аргументы**

* `tuple_num` — Кортеж значений числителя. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `div` — Значение делителя. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal`](/ru/reference/data-types/decimal)

**Возвращаемое значение**

Возвращает кортеж частных; для частных, где делитель равен `0`, возвращается `0`. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

**При нулевом делителе**

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

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

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

Добавленный в: v21.11.0

Вычисляет разность соответствующих элементов двух кортежей одинакового размера.

**Синтаксис**

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

**Псевдонимы**: `vectorDifference`

**Аргументы**

* `t1` — Первый кортеж. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `t2` — Второй кортеж. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает кортеж с результатами вычитания. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v23.8.0

Возвращает кортеж остатков от деления двух кортежей.

**Синтаксис**

```sql theme={null}
tupleModulo(tuple_num, tuple_mod)
```

**Аргументы**

* `tuple_num` — Кортеж значений делимого. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `tuple_mod` — Кортеж значений модуля. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает кортеж остатков от деления. При делении на ноль генерируется исключение. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v23.8.0

Возвращает кортеж остатков от деления элементов кортежа на заданный делитель.

**Синтаксис**

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

**Аргументы**

* `tuple_num` — Кортеж элементов делимого. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `div` — Значение делителя. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal`](/ru/reference/data-types/decimal)

**Возвращаемое значение**

Возвращает кортеж остатков от деления. При делении на ноль возникает ошибка. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v21.11.0

Вычисляет произведение соответствующих элементов двух кортежей одного размера.

**Синтаксис**

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

**Аргументы**

* `t1` — Первый кортеж. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `t2` — Второй кортеж. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает кортеж с результатами умножения. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v21.11.0

Возвращает кортеж, все элементы которого умножены на число.

**Синтаксис**

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

**Аргументы**

* `tuple` — Кортеж для умножения. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `number` — Множитель. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal`](/ru/reference/data-types/decimal)

**Возвращаемое значение**

Возвращает кортеж с умноженными элементами. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

```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>

Добавленный в: v24.8.0

Преобразует кортеж в массив имён столбцов. Для кортежа вида `Tuple(a T, b T, ...)` возвращает массив строк, представляющих именованные столбцы кортежа. Если элементы кортежа не имеют явных имён, в качестве имён столбцов вместо них будут использоваться их индексы.

**Синтаксис**

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

**Аргументы**

* Нет.

**Возвращаемое значение**

**Примеры**

**обычный**

```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>

Добавленный в: v21.11.0

Вычисляет значения, противоположные элементам кортежа.

**Синтаксис**

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

**Аргументы**

* `t` — кортеж, к которому применяется отрицание. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) or [`Tuple(Float*)`](/ru/reference/data-types/tuple) or [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает кортеж с результатом отрицания. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) or [`Tuple(Float*)`](/ru/reference/data-types/tuple) or [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v21.11.0

Вычисляет сумму соответствующих элементов двух кортежей одного размера.

**Синтаксис**

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

**Псевдонимы**: `vectorSum`

**Аргументы**

* `t1` — Первый кортеж. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `t2` — Второй кортеж. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает кортеж, содержащий суммы соответствующих элементов входных кортежей. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v26.4.0

Возвращает кортеж положительных остатков от деления элементов кортежа на заданный делитель.
В отличие от tupleModuloByNumber, результат всегда неотрицательный.

**Синтаксис**

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

**Аргументы**

* `tuple_num` — Tuple значений числителя. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)
* `div` — Значение делителя. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal`](/ru/reference/data-types/decimal)

**Возвращаемое значение**

Возвращает Tuple неотрицательных остатков. [`Tuple((U)Int*)`](/ru/reference/data-types/tuple) или [`Tuple(Float*)`](/ru/reference/data-types/tuple) или [`Tuple(Decimal)`](/ru/reference/data-types/tuple)

**Примеры**

**Базовое использование**

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

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

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

Добавленный в: v21.9.0

Преобразует кортеж в массив пар `(имя, значение)`.
Например, кортеж `Tuple(n1 T1, n2 T2, ...)` преобразуется в `Array(Tuple('n1', T1), Tuple('n2', T2), ...)`.
Все значения в кортеже должны быть одного типа.

**Синтаксис**

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

**Аргументы**

* `tuple` — Именованный кортеж со значениями любых типов. [`Tuple(n1 T1[, n2 T2, ...])`](/ru/reference/data-types/tuple)

**Возвращаемое значение**

Возвращает массив из пар `(name, value)`. [`Array(Tuple(String, T))`](/ru/reference/data-types/array)

**Примеры**

**Именованный кортеж**

```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)]
```

**Безымянный кортеж**

```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>

Выполняет синтаксическую подстановку элементов [кортежа](/ru/reference/data-types/tuple) в месте вызова.

Имена результирующих столбцов зависят от реализации и могут меняться. Не следует полагаться на конкретные имена столбцов после `untuple`.

**Синтаксис**

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

Вы можете использовать выражение `EXCEPT`, чтобы исключить столбцы из результата запроса.

**Аргументы**

* `x` — функция `tuple`, столбец или кортеж элементов. [Tuple](/ru/reference/data-types/tuple).

**Возвращаемое значение**

* Отсутствует.

**Примеры**

Входная таблица:

```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') │
└─────┴────┴────┴────┴────┴────┴───────────┘
```

Пример использования столбца типа `Tuple` в качестве параметра функции `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    │
└───────┴───────┘
```

Пример использования выражения `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">
  ## Функции расстояния
</div>

Описание всех поддерживаемых функций приведено в [документации по функциям расстояния](/ru/reference/functions/regular-functions/distance-functions).
