Sdílet prostřednictvím


APPROX_COUNT_DISTINCT (Transact-SQL)

Platí na: SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

Tato funkce vrací přibližný počet jedinečných nenulových hodnot v grupě.

Transact-SQL konvence syntaxe

Syntaxe

APPROX_COUNT_DISTINCT ( expression )   

Arguments

expression
Výraz jakéhokoliv typu, kromě obrazu, sql_variant, ntextu nebo textu.

Návratové typy

bigint

Poznámky

APPROX_COUNT_DISTINCT( expression ) vyhodnotí výraz pro každý řádek ve skupině a vrátí přibližný počet unikátních nenulových hodnot v grupě. Tato funkce je navržena tak, aby poskytovala agregace napříč velkými datovými sadami, kde je odezva důležitější než absolutní přesnost.

APPROX_COUNT_DISTINCT je navržen pro použití ve scénářích big data a je optimalizován pro následující podmínky:

  • Přístup k datovým sadám, které mají miliony řádků nebo více a
  • Agregace sloupce nebo sloupců, které mají mnoho odlišných hodnot

Implementace funkce zaručuje až 2% chybovosti v rámci pravděpodobnosti 97%.

APPROX_COUNT_DISTINCT vyžaduje méně paměti než vyčerpávající operace COUNT DISTINCT. Vzhledem k menší paměťové otěžbě je méně pravděpodobné, APPROX_COUNT_DISTINCT že se paměť přelije na disk ve srovnání s přesnou operací COUNT DISTINCT. Pro více informací o algoritmu používaném k dosažení tohoto cíle navštivte HyperLogLog.

Poznámka:

U řetězců citlivých na kolaci APPROX_COUNT_DISTINCT používá binární shodu a poskytuje výsledky, které by byly generovány v přítomnosti kolací BIN, nikoli BIN2.

Examples

A. Používám APPROX_COUNT_DISTINCT

Tento příklad vrací přibližný počet různých klíčů pořadí z tabulky pořadí.

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

Tady je soubor výsledků.

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

B. Použitím APPROX_COUNT_DISTINCT s GROUP BY

Tento příklad vrací přibližný počet různých klíčů objednávek podle stavu objednávek z tabulky objednávek.

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

Tady je soubor výsledků.

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

Viz také

agregační funkce (Transact-SQL)
COUNT (Transact-SQL)