APPROX_COUNT_DISTINCT (Transact-SQL)

Gilt für:SQL Server 2019 (15.x)Azure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsSQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Diese Funktion gibt die ungefähre Anzahl von eindeutigen Ungleich-Null-Werten in einer Gruppe zurück.

Transact-SQL-Syntaxkonventionen

Syntax

APPROX_COUNT_DISTINCT ( expression )   

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

expression
Eine expression beliebigen Typs mit Ausnahme von image, sql_variant, ntextoder text.

Rückgabetypen

bigint

Bemerkungen

APPROX_COUNT_DISTINCT( expression ) wertet einen Ausdruck für jede Zeile in einer Gruppe aus und gibt die geschätzte Anzahl der eindeutigen Werte in einer Gruppe zurück, die nicht NULL sind. Diese Funktion wurde entwickelt, um Aggregationen über große Datasets hinweg bereitzustellen, bei denen die Reaktionsfähigkeit wichtiger ist als die absolute Präzision.

APPROX_COUNT_DISTINCT ist für den Einsatz in großen Datenszenarien konzipiert und für die folgenden Bedingungen optimiert:

  • Zugriff auf Datasets, die aus Millionen von Zeilen oder mehr bestehen und
  • Aggregation einer Spalte oder von Spalten mit vielen unterschiedlichen Werten

Die Funktionsimplementierung garantiert eine Fehlerquote von bis zu 2 % mit einer Wahrscheinlichkeit von 97 %.

APPROX_COUNT_DISTINCT erfordert weniger Speicherplatz als ein vollständiger COUNT DISTINCT-Vorgang. Angesichts des geringeren Speicherbedarfs ist es weniger wahrscheinlich, dass durch APPROX_COUNT_DISTINCT weniger Speicher zum Datenträger überläuft, als bei einem präzisen COUNT DISTINCT-Vorgang. Weitere Informationen zu dem Algorithmus, mit dem dies erreicht wird, finden Sie unter HyperLogLog.

Hinweis

Bei sortierungsbezogenen Zeichenfolgen verwendet APPROX_COUNT_DISTINCT einen binären Abgleich und liefert Ergebnisse, die bei Vorhandensein von BIN-Sortierungen und nicht von BIN2 erzeugt worden wären.

Beispiele

A. Verwenden von APPROX_COUNT_DISTINCT

Dieses Beispiel gibt die ungefähre Anzahl verschiedener Sortierschlüssel aus der Sortiertabelle zurück.

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

Hier ist das Resultset.

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

B. Verwenden von APPROX_COUNT_DISTINCT mit GROUP BY

Dieses Beispiel gibt die ungefähre Anzahl verschiedener Sortierschlüssel geordnet nach Sortierstatus aus der Sortiertabelle zurück.

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

Hier ist das Resultset.

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

Weitere Informationen

Aggregatfunktionen (Transact-SQL)
COUNT (Transact-SQL)