APPROX_COUNT_DISTINCT (Transact-SQL)

Si applica a: SQL Server 2019 (15.x) database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics in Microsoft Fabric Warehouse in Microsoft Fabric

Questa funzione restituisce il numero approssimativo di valori univoci non Null in un gruppo.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

APPROX_COUNT_DISTINCT ( expression )   

Argomenti

expression
Espressione di qualsiasi tipo, a eccezione di image, sql_variant, ntext o text.

Tipi restituiti

bigint

Osservazioni:

APPROX_COUNT_DISTINCT( expression ) valuta un'espressione per ogni riga in un gruppo e restituisce il numero approssimativo di valori univoci non Null in un gruppo. Questa funzione è progettata per fornire aggregazioni su set di dati di grandi dimensioni in cui la velocità di risposta è più importante della precisione assoluta.

APPROX_COUNT_DISTINCT è progettata per l'uso in scenari Big Data ed è ottimizzata per le condizioni seguenti:

  • Accesso a set di dati con più di milioni di righe e
  • Aggregazione di una colonna o di più colonne con molti valori distinti

L'implementazione della funzione garantisce un tasso di errore fino al 2% con una probabilità del 97%.

APPROX_COUNT_DISTINCT richiede meno memoria rispetto a un'operazione COUNT DISTINCT completa. Dato il footprint di memoria più piccolo, è meno probabile che APPROX_COUNT_DISTINCT causi lo spill della memoria su disco rispetto a un'operazione COUNT DISTINCT precisa. Per altre informazioni sull'algoritmo usato per ottenere questo risultato, vedere HyperLogLog.

Nota

Con le stringhe sensibili alle regole di confronto, APPROX_COUNT_DISTINCT usa una corrispondenza binaria e fornisce i risultati che verrebbero generati in presenza di regole di confronto BIN e non BIN2.

Esempi

R. Uso di APPROX_COUNT_DISTINCT

Questo esempio restituisce il numero approssimativo di chiavi di ordine diverse dalla tabella orders.

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

Il set di risultati è il seguente.

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

B. Uso di APPROX_COUNT_DISTINCT con GROUP BY

Questo esempio restituisce il numero approssimativo di chiavi di ordine diverse in base allo stato dell'ordine dalla tabella orders.

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

Il set di risultati è il seguente.

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

Vedi anche

Funzioni di aggregazione (Transact-SQL)
COUNT (Transact-SQL)