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

> Вычисляет приблизительное количество различных значений аргумента.

# uniqCombined

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

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

Вычисляет приблизительное количество различных значений аргумента.
Возвращает результат детерминированно (он не зависит от порядка обработки запроса).

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

По сравнению с функцией uniq, функция uniqCombined:

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

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

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

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

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

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

* `HLL_precision` — Необязательный. Логарифм по основанию 2 от числа ячеек в 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 uniqCombined(number) FROM numbers(1e6);
```

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

**С настраиваемой точностью**

```sql title=Query theme={null}
SELECT uniqCombined(15)(number) FROM numbers(1e5);
```

```response title=Response theme={null}
┌─uniqCombined(15)(number)─┐
│                   100768 │
└──────────────────────────┘
```

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

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