APPROX_COUNT_DISTINCT (Transact-SQL)

Применимо к: даSQL Server 2019 (15.x) ДаБаза данных SQL Azure ДаУправляемый экземпляр SQL Azure даAzure Synapse Analytics

Эта функция возвращает приблизительное количество уникальных значений, не равных NULL, в группе.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

APPROX_COUNT_DISTINCT ( expression )   

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

expression
Выражение любого типа, кроме image, sql_variant, ntext и text.

Типы возвращаемых данных

bigint

Remarks

Функция APPROX_COUNT_DISTINCT( expression ) вычисляет выражение для каждой строки в группе и возвращает приблизительное количество уникальных значений, не равных NULL, в группе. Эта функция предназначена для агрегирования в больших наборах данных, для которых скорость реагирования намного важнее абсолютной точности.

Функция APPROX_COUNT_DISTINCT предназначена для использования в сценариях использования больших данных и оптимизирована для следующих условий:

  • доступ из наборов данных, содержащих миллионы или более строк, И
  • агрегирование данных одного или нескольких столбцов с большим количеством различных значений.

Реализация функции гарантирует до 2 % ошибок с вероятностью 97 %.

APPROX_COUNT_DISTINCT использует меньше памяти, чем длительная операция COUNT DISTINCT. Если сравнивать с точной операцией COUNT DISTINCT, то с учетом меньшего объема используемой памяти уменьшается и вероятность того, что APPROX_COUNT_DISTINCT память будет выгружаться на диск. См. дополнительные сведения о HyperLogLog.

Примечание

С помощью строк, зависимых от параметров сортировки, APPROX_COUNT_DISTINCT использует совпадение двоичных значений и предоставляет результаты, которые могли быть созданы при наличии параметров сортировки BIN, но не BIN2.

Примеры

A. Использование функции APPROX_COUNT_DISTINCT

В этом примере функция возвращает приблизительное количество ключей различных заказов из таблицы "Заказы".

SELECT APPROX_COUNT_DISTINCT(O_OrderKey) AS Approx_Distinct_OrderKey
FROM dbo.Orders;

Результирующий набор:

Approx_Distinct_OrderKey
------------------------
15164704

Б. Использование функции APPROX_COUNT_DISTINCT с фильтром GROUP BY

В этом примере функция возвращает приблизительное количество ключей различных заказов, отфильтрованных по состоянию заказов из таблицы "Заказы".

SELECT O_OrderStatus, APPROX_COUNT_DISTINCT(O_OrderKey) AS Approx_Distinct_OrderKey
FROM dbo.Orders
GROUP BY O_OrderStatus
ORDER BY O_OrderStatus; 

Результирующий набор:

O_OrderStatus                                                    Approx_Distinct_OrderKey
---------------------------------------------------------------- ------------------------
F                                                                7397838
O                                                                7387803
P                                                                388036

См. также

Агрегатные функции (Transact-SQL)
COUNT (Transact-SQL)