182.查找重复的电子邮箱

警告
本文最后更新于 2020-04-05,文中内容可能已过时。

编写一个 SQL 查询,查找 Person 表中重复的电子邮箱。

示例:

1
2
3
4
5
6
7
+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+

根据以上输入,你的查询应返回以下结果

1
2
3
4
5
+---------+
| Email   |
+---------+
| a@b.com |
+---------+

说明:

  • 所有的电子邮箱都是小写字母。

重复的电子邮箱存在多次。要计算每封电子邮箱的存在次数,我们可以使用以下代码。

1
2
3
select Email, count(Email) as num
from Person
group by Email;

输出结果:

1
2
3
4
5
6
+---------+-----+
| Email   | num |
|---------|-----|
| a@b.com | 2   |
| c@d.com | 1   |
+---------+-----+

以此作为临时表,我们可以得到下面的解决方案。

1
2
3
4
5
6
7
8
select Email from
(
  select Email, count(Email) as num
  from Person
  group by Email
) as statistic
where num > 1
;

GROUP BY 添加条件的一种更常用的方法是使用 HAVING 子句,该子句更为简单高效。

所以我们可以将上面的解决方案重写为:

1
2
3
4
select Email
from Person
group by Email
having count(Email) > 1;