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

> Вычисляет приблизительное количество различных значений аргумента. Аналогична uniqCombined, но использует 64-битный хеш для всех типов данных, а не только для типа данных String.

# uniqCombined64

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

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

Вычисляет приблизительное количество различных значений аргумента.
То же, что и [`uniqCombined`](/ru/reference/functions/aggregate-functions/uniqCombined), но использует 64-битный хеш для всех типов данных, а не только для типа данных String.

Эта функция возвращает детерминированный результат (он не зависит от порядка обработки запроса).

<Note>
  Поскольку для всех типов используется 64-битный хеш, результат не страдает от очень большой погрешности при кардинальностях, значительно превышающих `UINT_MAX`, как у [`uniqCombined`](/ru/reference/functions/aggregate-functions/uniqCombined), который использует 32-битный хеш для типов, отличных от String.
</Note>

По сравнению с функцией [uniq](/ru/reference/functions/aggregate-functions/uniq), функция uniqCombined64:

* Потребляет в несколько раз меньше памяти
* Обеспечивает в несколько раз более высокую точность

<Accordion title="Подробности реализации">
  Эта функция вычисляет 64-битный хеш для всех типов данных и всех параметров агрегатной функции, а затем использует его в вычислениях.
  Она использует комбинацию трех алгоритмов: массива, хеш-таблицы и [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) с таблицей коррекции ошибок:

  * Для небольшого числа различных элементов используется массив
  * Когда размер множества увеличивается, используется хеш-таблица
  * Для еще большего числа элементов используется HyperLogLog, который занимает фиксированный объем памяти
</Accordion>

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

```sql theme={null}
uniqCombined64(HLL_precision)(x[, ...])
uniqCombined64(x[, ...])
```

**Параметры**

* `HLL_precision` — Необязательный параметр. Двоичный логарифм числа ячеек в HyperLogLog. Значение по умолчанию — 17, что соответствует примерно 96 КиБ памяти (2^17 ячеек по 6 бит каждая). Диапазон: \[12, 20]. [`UInt8`](/ru/reference/data-types/int-uint)

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

* `x` — Переменное число параметров. [`Tuple(T)`](/ru/reference/data-types/tuple) или [`Array(T)`](/ru/reference/data-types/array) или [`Date`](/ru/reference/data-types/date) или [`DateTime`](/ru/reference/data-types/datetime) или [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal`](/ru/reference/data-types/decimal)

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

Возвращает число типа UInt64, которое представляет приблизительное количество различных значений аргументов. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример для большого набора данных**

```sql title=Query theme={null}
SELECT uniqCombined64(number) FROM numbers(1e10);
```

```response title=Response theme={null}
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘
```

**Сравнение с uniqCombined**

```sql title=Query theme={null}
-- uniqCombined64 с большим набором данных
SELECT uniqCombined64(number) FROM numbers(1e10);

-- uniqCombined с тем же набором данных даёт плохое приближение
SELECT uniqCombined(number) FROM numbers(1e10);
```

```response title=Response theme={null}
┌─uniqCombined64(number)─┐
│             9998568925 │ -- 10,00 миллиарда
└────────────────────────┘
┌─uniqCombined(number)─┐
│           5545308725 │ -- 5,55 миллиарда
└──────────────────────┘
```

**См. также**

* [uniq](/ru/reference/functions/aggregate-functions/uniq)
* [uniqCombined](/ru/reference/functions/aggregate-functions/uniqCombined)
* [uniqHLL12](/ru/reference/functions/aggregate-functions/uniqHLL12)
* [uniqExact](/ru/reference/functions/aggregate-functions/uniqExact)
* [uniqTheta](/ru/reference/functions/aggregate-functions/uniqthetasketch)
