APPROX_COUNT_DISTINCT (Transact-SQL)

Aplica-se a: SQL Server 2019 (15.x) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric

Essa função retorna o número aproximado de valores não nulos exclusivos em um grupo.

Convenções de sintaxe de Transact-SQL

Sintaxe

APPROX_COUNT_DISTINCT ( expression )   

Argumentos

expressão
Uma expressão de qualquer tipo, exceto image, sql_variant, ntext ou text.

Tipos de retorno

bigint

Comentários

APPROX_COUNT_DISTINCT( expression ) avalia uma expressão de cada linha em um grupo e retorna o número aproximado de valores não nulos exclusivos em um grupo. Essa função foi projetada para fornecer agregações em grandes conjuntos de dados, nos quais a capacidade de resposta é mais importante do que a precisão absoluta.

APPROX_COUNT_DISTINCT foi projetado para uso em cenários de big data e é otimizado para as seguintes condições:

  • Acesso de conjuntos de dados com milhões de linhas ou mais e
  • Agregação de uma coluna ou colunas com muitos valores distintos

A implementação da função garante uma taxa de erro de até %2 em uma probabilidade de 97%.

APPROX_COUNT_DISTINCT requer menos memória do que uma operação COUNT DISTINCT exaustiva. Dado o volume de memória menor, APPROX_COUNT_DISTINCT apresenta menos probabilidade de despejo de memória em disco comparado com uma operação COUNT DISTINCT precisa. Saiba mais sobre o algoritmo usado para conseguir isso em HyperLogLog.

Observação

Com as cadeias de caracteres confidenciais de ordenação, APPROX_COUNT_DISTINCT usa uma correspondência binária e fornece resultados que teriam sido gerados na presença de ordenações BIN, não BIN2.

Exemplos

a. Usar APPROX_COUNT_DISTINCT

Este exemplo retorna o número aproximado de chaves de ordem diferentes da tabela ordens.

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

Veja a seguir o conjunto de resultados.

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

B. Usar APPROX_COUNT_DISTINCT com GROUP BY

Este exemplo retorna o número aproximado de chaves de ordem diferentes por status da ordem da tabela ordens.

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

Veja a seguir o conjunto de resultados.

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

Confira também

Funções de agregação (Transact-SQL)
COUNT (Transact-SQL)