APPROX_COUNT_DISTINCT (T-SQL)
Berlaku untuk: Titik akhir analitik SQL Server 2019 (15.x) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Fungsi ini mengembalikan perkiraan jumlah nilai non-null unik dalam grup.
Sintaks
APPROX_COUNT_DISTINCT ( expression )
Argumen
expression
Ekspresi jenis apa pun, kecuali gambar, sql_variant, ntext, atau teks.
Jenis yang dikembalikan
bigint
Keterangan
APPROX_COUNT_DISTINCT( expression )
mengevaluasi ekspresi untuk setiap baris dalam grup, dan mengembalikan perkiraan jumlah nilai non-null unik dalam grup. Fungsi ini dirancang untuk memberikan agregasi di seluruh himpunan data besar di mana respons lebih penting daripada presisi absolut.
APPROX_COUNT_DISTINCT
dirancang untuk digunakan dalam skenario big data dan dioptimalkan untuk kondisi berikut:
- Akses himpunan data yang jutaan baris atau lebih tinggi dan
- Agregasi kolom atau kolom yang memiliki banyak nilai berbeda
Implementasi fungsi menjamin tingkat kesalahan hingga 2% dalam probabilitas 97%.
APPROX_COUNT_DISTINCT
membutuhkan lebih sedikit memori daripada operasi COUNT DISTINCT yang lengkap. Mengingat jejak memori yang lebih kecil, APPROX_COUNT_DISTINCT
kemungkinan kecil untuk meluapkan memori ke disk dibandingkan dengan operasi COUNT DISTINCT yang tepat. Untuk mempelajari selengkapnya tentang algoritma yang digunakan untuk mencapai hal ini, lihat HyperLogLog.
Catatan
Dengan string sensitif kolaborasi, APPROX_COUNT_DISTINCT menggunakan kecocokan biner dan memberikan hasil yang akan dihasilkan di hadapan kolaborasi BIN dan bukan BIN2.
Contoh
J. Menggunakan APPROX_COUNT_DISTINCT
Contoh ini mengembalikan perkiraan jumlah kunci pesanan yang berbeda dari tabel pesanan.
SELECT APPROX_COUNT_DISTINCT(O_OrderKey) AS Approx_Distinct_OrderKey
FROM dbo.Orders;
Berikut set hasilnya.
Approx_Distinct_OrderKey
------------------------
15164704
B. Menggunakan APPROX_COUNT_DISTINCT dengan GROUP BY
Contoh ini mengembalikan perkiraan jumlah kunci pesanan yang berbeda berdasarkan status pesanan dari tabel pesanan.
SELECT O_OrderStatus, APPROX_COUNT_DISTINCT(O_OrderKey) AS Approx_Distinct_OrderKey
FROM dbo.Orders
GROUP BY O_OrderStatus
ORDER BY O_OrderStatus;
Berikut set hasilnya.
O_OrderStatus Approx_Distinct_OrderKey
---------------------------------------------------------------- ------------------------
F 7397838
O 7387803
P 388036