PersonTablodaki tüm yinelenen e-posta adreslerini bulmak için bir SQL sorgusu yazın .
+----+---------+
| 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 2
Sonuç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