Udostępnij za pomocą


APPROX_COUNT_DISTINCT (Transact-SQL)

Dotyczy do: 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

Funkcja ta zwraca przybliżoną liczbę unikalnych wartości niezerowych w grupie.

Transact-SQL konwencje składni

Składnia

APPROX_COUNT_DISTINCT ( expression )   

Arguments

expression
Wyrażenie dowolnego typu, z wyjątkiem obrazu, sql_variant, ntextu lub tekstu.

Typy zwracane

bigint

Uwagi

APPROX_COUNT_DISTINCT( expression ) oblicza wyrażenie dla każdego wiersza w grupie i zwraca przybliżoną liczbę unikalnych, niezerowych wartości w grupie. Funkcja ta została zaprojektowana tak, aby umożliwiać agregacje na dużych zbiorach danych, gdzie responsywność jest ważniejsza niż absolutna precyzja.

APPROX_COUNT_DISTINCT Jest zaprojektowany do zastosowań w scenariuszach big data i jest zoptymalizowany pod kątem następujących warunków:

  • Dostęp do zbiorów danych o milionach wierszy lub większych oraz
  • Agregacja kolumny lub kolumn, które mają wiele różnych wartości

Implementacja funkcji gwarantuje do 2% błędów w ramach prawdopodobieństwa 97%.

APPROX_COUNT_DISTINCT wymaga mniej pamięci niż wyczerpująca operacja COUNT DISTINCT. Ze względu na mniejszy ślad pamięci, jest mniej prawdopodobne, APPROX_COUNT_DISTINCT że rozlewa się na dysk w porównaniu do precyzyjnej operacji COUNT DISTINCT. Aby dowiedzieć się więcej o algorytmie używanym do tego celu, zobacz HyperLogLog.

Uwaga / Notatka

W przypadku ciągów wrażliwych na kolidację APPROX_COUNT_DISTINCT używa dopasowania binarnego i dostarcza wyniki, które byłyby generowane w obecności kolacji BIN, a nie BIN2.

Przykłady

A. Używając APPROX_COUNT_DISTINCT

Ten przykład zwraca przybliżoną liczbę różnych kluczy zamówień z tabeli zamówień.

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

Oto zestaw wyników.

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

B. Używając APPROX_COUNT_DISTINCT z GROUP BY

Ten przykład zwraca przybliżoną liczbę różnych kluczy zamówień według statusu zamówienia z tabeli zamówień.

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

Oto zestaw wyników.

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

Zobacz także

funkcje agregujące (Transact-SQL)
COUNT (Transact-SQL)