Partilhar via


APPROX_COUNT_DISTINCT (Transact-SQL)

Aplica-se a: SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric SQLdatabase in Microsoft Fabric

Esta função devolve o número aproximado de valores únicos não nulos num grupo.

Transact-SQL convenções de sintaxe

Sintaxe

APPROX_COUNT_DISTINCT ( expression )   

Arguments

expressão
Uma expressão de qualquer tipo, exceto imagem, sql_variant, texto narcisista ou texto.

Tipos de devolução

bigint

Observações

APPROX_COUNT_DISTINCT( expression ) avalia uma expressão para cada linha de um grupo e devolve o número aproximado de valores únicos não nulos num grupo. Esta função foi concebida para fornecer agregações em grandes conjuntos de dados onde a resposta é mais crítica do que a precisão absoluta.

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

  • Acesso a conjuntos de dados com milhões de linhas ou superiores e
  • Agregação de uma coluna ou colunas que têm muitos valores distintos

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

APPROX_COUNT_DISTINCT requer menos memória do que uma operação exaustiva COUNT DISTINCT. Dada a menor área de memória, APPROX_COUNT_DISTINCT é menos provável que a memória seja transferida para o disco em comparação com uma operação precisa COUNT DISTINCT. Para saber mais sobre o algoritmo utilizado para isso, consulte HyperLogLog.

Observação

Com strings sensíveis à colação, APPROX_COUNT_DISTINCT utiliza uma correspondência binária e fornece resultados que teriam sido gerados na presença de colações BIN e não BIN2.

Examples

A. Usar APPROX_COUNT_DISTINCT

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

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

Aqui está o conjunto de resultados.

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

B. Usar APPROX_COUNT_DISTINCT com GROUP BY

Este exemplo devolve o número aproximado de chaves de ordem diferentes pelo estado da ordem da tabela de ordens.

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

Aqui está o conjunto de resultados.

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

Consulte também

Funções agregadas (Transact-SQL)
CONTAGEM (Transact-SQL)