Delen via


APPROX_COUNT_DISTINCT (Transact-SQL)

Van toepassing op: 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

Deze functie geeft het geschatte aantal unieke niet-nulwaarden in een groep terug.

Transact-SQL syntaxis-conventies

Syntaxis

APPROX_COUNT_DISTINCT ( expression )   

Arguments

expressie
Een uitdrukking van welk type dan ook, behalve afbeelding, sql_variant, ntext of tekst.

Retourtypen

bigint

Opmerkingen

APPROX_COUNT_DISTINCT( expression ) evalueert een uitdrukking voor elke rij in een groep en geeft het geschatte aantal unieke niet-nulwaarden in een groep terug. Deze functie is ontworpen om aggregaties te bieden over grote datasets waarbij responsiviteit belangrijker is dan absolute precisie.

APPROX_COUNT_DISTINCT is ontworpen voor gebruik in big data-scenario's en is geoptimaliseerd voor de volgende omstandigheden:

  • Toegang tot datasets die miljoenen rijen of hoger zijn en
  • Aggregatie van een kolom of kolommen die veel verschillende waarden hebben

De functie-implementatie garandeert een foutpercentage tot 2% binnen een kans van 97%.

APPROX_COUNT_DISTINCT vereist minder geheugen dan een uitputtende COUNT DISTINCT-operatie. Gezien de kleinere geheugenvoetafdruk APPROX_COUNT_DISTINCT is de kans kleiner dat geheugen naar de schijf wordt gestort vergeleken met een precieze COUNT DISTINCT-operatie. Voor meer informatie over het algoritme dat hiervoor is gebruikt, zie HyperLogLog.

Opmerking

Bij collatiegevoelige strings gebruikt APPROX_COUNT_DISTINCT een binaire match en levert resultaten die zouden zijn gegenereerd in aanwezigheid van BIN-collaties en niet BIN2.

Voorbeelden

Eén. Met APPROX_COUNT_DISTINCT

Dit voorbeeld geeft het geschatte aantal verschillende ordersleutels uit de ordertabel terug.

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

Hier is het resultatenoverzicht.

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

B. Gebruik APPROX_COUNT_DISTINCT met GROUP BY

Dit voorbeeld geeft het geschatte aantal verschillende ordersleutels terug volgens orderstatus uit de ordertabel.

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

Hier is het resultatenoverzicht.

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

Zie ook

statistische functies (Transact-SQL)
GRAAF (Transact-SQL)