APPROX_COUNT_DISTINCT (Transact-SQL)

Gäller för: 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

Denna funktion returnerar det ungefärliga antalet unika icke-nollvärden i en grupp.

Transact-SQL syntaxkonventioner

Syntax

APPROX_COUNT_DISTINCT ( expression )   

Arguments

uttryck
Ett uttryck av vilken typ som helst, förutom bild, sql_variant, ntext eller text.

Returtyper

bigint

Anmärkningar

APPROX_COUNT_DISTINCT( expression ) utvärderar ett uttryck för varje rad i en grupp och returnerar det ungefärliga antalet unika icke-nullvärden i en grupp. Denna funktion är utformad för att tillhandahålla aggregeringar över stora datamängder där responsivitet är viktigare än absolut precision.

APPROX_COUNT_DISTINCT är designad för användning i big data-scenarier och är optimerad för följande förhållanden:

  • Åtkomst till datamängder som är miljoner rader eller högre och
  • Aggregering av en kolumn eller kolumner som har många olika värden

Funktionsimplementeringen garanterar upp till en felfrekvens på 2% inom en sannolikhet på 97%.

APPROX_COUNT_DISTINCT kräver mindre minne än en uttömmande COUNT DISTICE-operation. Med tanke på det mindre minnesutrymmet APPROX_COUNT_DISTINCT är det mindre sannolikt att minne spills till disken jämfört med en exakt COUNT DISTIST-operation. För att lära dig mer om algoritmen som används för att uppnå detta, se HyperLogLog.

Anmärkning

Med collationkänsliga strängar använder APPROX_COUNT_DISTINCT en binär matchning och ger resultat som skulle ha genererats i närvaro av BIN-kollationer och inte BIN2.

Examples

A. Att använda APPROX_COUNT_DISTINCT

Detta exempel returnerar ungefärligt antal olika ordningsnycklar från ordningstabellen.

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

Här är resultatet.

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

B. Att använda APPROX_COUNT_DISTINCT med GROUP BY

Detta exempel returnerar ungefärligt antal olika ordningsnycklar efter orderstatus från ordningstabellen.

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

Här är resultatet.

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

Se även

Aggregerade funktioner (Transact-SQL)
GREVE (Transact-SQL)