Share via


APPROX_COUNT_DISTINCT (Transact-SQL)

S’applique à :SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPoint de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

Cette fonction retourne le nombre approximatif de valeurs non NULL uniques dans un groupe.

Conventions de la syntaxe Transact-SQL

Syntaxe

APPROX_COUNT_DISTINCT ( expression )   

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

expression
Expression de tout type, sauf image, sql_variant, ntext, or text.

Types de retour

bigint

Notes

APPROX_COUNT_DISTINCT( expression )Évalue une expression pour chaque ligne d’un groupe et renvoie le nombre de valeurs non NULL uniques dans un groupe. Cette fonction est conçue pour fournir des agrégations dans de vastes jeux de données où la réactivité est plus importante que la précision absolue.

APPROX_COUNT_DISTINCT est conçu pour une utilisation dans les scénarios big data et optimisé pour les conditions suivantes :

  • Accès à des jeux de données comportant des millions de lignes ou plus et
  • Agrégation d’une ou de plusieurs colonnes qui ont de nombreuses valeurs distinctes

L’implémentation de la fonction garantit un taux d’erreur pouvant atteindre 2 % avec une probabilité de 97 %.

APPROX_COUNT_DISTINCT nécessite moins de mémoire qu’une opération COUNT DISTINCT exhaustive. Étant donné l’encombrement mémoire plus faible, APPROX_COUNT_DISTINCT est moins susceptible de propager la mémoire dans le disque qu’une opération COUNT DISTINCT précise. Pour en savoir plus sur l’algorithme utilisé pour y parvenir, consultez HyperLogLog.

Notes

Avec des chaînes sensibles au classement, APPROX_COUNT_DISTINCT utilise une correspondance binaire et fournit des résultats qui auraient été générés en présence de classements BIN, mais pas BIN2.

Exemples

R. Utilisation d’APPROX_COUNT_DISTINCT

Cet exemple retourne le nombre approximatif de clés d’ordre différent de la table d’ordres.

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

Voici le jeu de résultats obtenu.

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

B. Utilisation d’APPROX_COUNT_DISTINCT avec GROUPER PAR

Cet exemple retourne le nombre approximatif de clés d’ordre différent par état d’ordre de la table d’ordres.

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

Voici le jeu de résultats obtenu.

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

Voir aussi

Fonctions d'agrégation (Transact-SQL)
COUNT (Transact-SQL)