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