Benzersiz kullanıcı raporları, analiz ve istatistik için gereklidir. Ancak gerçek verilere baktığımızda genellikle hesap dublike oluyor, NULL değerler (örneğin, belirtilmemiş e-posta) ve farklı kriterlerin dikkate alınması gerekiyor (örneğin, ad, e-posta, IP'ye göre benzersizlik veya bazen bunların kombinasyonları gibi).
Tipik bir hata, COUNT(DISTINCT user_id) kullanarak, gerekli sütunlarda NULL veya belirsiz tekrarların olduğunu dikkate almaksızın saymaktır (örneğin, bir kişinin farklı e-posta adresleri veya aynı user_id'ye sahip farklı statüde birden fazla satır). GROUP BY ile yapılan karmaşık sorgular, benzersizlik mantığı iyi düşünülmezse yanlış sonuçlar verebilir.
DISTINCT, GROUP BY ve NULL filtrelemelerini birleştirmek önemlidir. Bazen verileri önceden CTE veya alt sorgu içinde hazırlamak ve gerekli özellikler setine göre gruplaşmak gerekir.
Örnek kod:
-- NULL'ları göz ardı ederek e-posta ve IP'ye göre benzersiz kullanıcı sayımı SELECT COUNT(*) AS unique_users FROM ( SELECT DISTINCT email, ip_address FROM users WHERE email IS NOT NULL AND ip_address IS NOT NULL ) u;
Anahtar özellikler:
COUNT(DISTINCT ...) NULL olan satırları değerlendirir mi?
Hayır: Eğer DISTINCT listesindeki sütunlardan en az birinin değeri NULL ise, bu kombinasyon ayrı bir benzersiz olarak kabul edilir (NULL, SQL standardında NULL'e eşit değildir). Genellikle, öncelikle NULL'ları filtrelemek daha uygundur.
NULL'ı DISTINCT ile NULL ile karşılaştırmak mümkün mü?
SQL'de her NULL değer çifti farklı olarak sayılır, bu nedenle herhangi bir sütunda NULL olan her satır ayrı bir satır olarak kabul edilir. IS NOT NULL filtresi uygulanmalıdır.
GROUP BY her zaman DISTINCT ile aynı sonucu mu verir?
Hayır: GROUP BY, her tekrarlanmayan değer kombinasyonu için bir satır oluşturur, ancak DISTINCT sadece tekrarları kaldırır. Bazı durumlarda sonuçlar farklıdır, özellikle bir toplama uygulandığında.
Bir iş analisti COUNT(DISTINCT user_id) kullanarak benzersiz müşteri raporu oluşturuyor, ancak user_id gerçekte NULL veya dublike olabilir (örneğin, geçici hesaplar). Gerçek kullanıcı sayısı, raporda bozulmuş göstergeler ile daha fazla çıkıyor.
Artıları:
Eksileri:
Analist, öncelikle verileri temizleyerek, NULL ve belirgin tekrarları alt sorgularda filtreliyor ve ayrıca karmaşık benzersizlik kriterleri için SET işlemleri kullanıyor.
Artıları:
Eksileri: