Поделиться через


APPROX_COUNT_DISTINCT (Transact-SQL)

Относится к: SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in 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)