APPROX_COUNT_DISTINCT (Transact-SQL)

Область применения: SQL Server 2019 (15.x) База данных SQL Azure Управляемый экземпляр SQL Azure конечная точка аналитики SQL Azure Synapse Analytics в хранилище Microsoft Fabric в Microsoft Fabric

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

APPROX_COUNT_DISTINCT ( expression )   

Аргументы

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

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

bigint

Замечания

Функция 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.

Примеры

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

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

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

Вот результирующий набор.

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

B. Использование функции 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)