APPROX_COUNT_DISTINCT (Transact-SQL)
S’applique à : point de terminaison d’analytique SQL Server 2019 (15.x) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics SQL Analytics dans Microsoft Fabric Warehouse 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 )
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.
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.
O_OrderStatus Approx_Distinct_OrderKey
---------------------------------------------------------------- ------------------------
F 7397838
O 7387803
P 388036