+----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+Not : Tüm e-posta adresleri küçük harflerle yazılmıştır.
İkincisi, konu gereksinimleri
Örneklem
Yukarıdaki girdiye dayanarak, sorgunuz aşağıdaki sonuçları döndürmelidir: +---------+ | Email | +---------+ | a@b.com | +---------+
ziyaret etmek
1. Toplama işlevi 2. 10~25dk kullanılması tavsiye edilir.
3. Problem Analizi
Yinelenen e-posta adresleri birden çok kez mevcut. Her bir e-postanın kaç kez var olduğunu saymak için aşağıdaki iki yöntem için ilgili kodu kullanabiliriz:
1. Toplama işlevi
Toplama işlevi, verilen gruplama koşullarına göre aynı niteliklere sahip hedef değerlerin gruplandırılması anlamına gelir.
Burada, aynı posta kutusu numarasına sahip verileri önceden bir grup halinde gruplamak için toplama işlevini kullanıyoruz.Yukarıdaki group by örneği örnek alarak, sonuçlar aşağıdaki gibidir:
a@b.com 1 3 ----------- c@d.com 2Sonuçları gruplandırdıktan sonra having count, yinelenen e-posta adresleri olan 1'den büyük bir değere sahip sonuçları filtrelemek için belirli işlemleri kullanın.
2. Kendi kendine bağlantı
Kendi kendine katılma, aynı tabloya karşılık gelen birleştirme işlemini gerçekleştirmektir. Her iki ab'nin de Person geldiği ,
İlk filtre, tabloda tekrarlanmayan e-postaları önceden seçmek ve ardından tabloyu başka bir değişkenle dolaşmaktır. Aynı e-postanın iki koşulu, ancak farklı kimlik numaraları karşılanıyorsa, çıktı aradığımız yinelenen e-postadır.
Dördüncüsü, kodlama uygulaması
1. Toplama işlevi
select Email from Person group by Email -- Gruplandırma having count(*)>1 -- filtre
2. Bağlantı sorgusu
select distinct a.Email from Person as a, Person as b where a.Email=b.Email and a.Id!=b.Id
