APPROX_COUNT_DISTINCT (Transact-SQL)

Aplica-se a: simSQL Server 2019 (15.x) SimBanco de Dados SQL do Azure SimInstância Gerenciada do Azure SQL simAzure Synapse Analytics

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

Ícone de link do tópico Convenções da sintaxe Transact-SQL

Sintaxe

APPROX_COUNT_DISTINCT ( expression )   

Observação

Para ver a sintaxe do Transact-SQL para o SQL Server 2014 e versões anteriores, confira a Documentação das versões anteriores.

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;

Este é 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; 

Este é 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)