您当前的位置: 首页 >  sql

知其黑、受其白

暂无认证

  • 0浏览

    0关注

    1250博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL查找重复的电子邮箱

知其黑、受其白 发布时间:2021-08-04 19:01:50 ,浏览量:0

MySQL查找重复的电子邮箱
  • SQL架构
  • 题目描述
  • 题解
    • 方法一:使用 GROUP BY 和临时表
    • 方法二:使用 GROUP BY 和 HAVING 条件

SQL架构
Create table If Not Exists Person (Id int, Email varchar(255));

insert into Person (Id, Email) values ('1', 'a@b.com');
insert into Person (Id, Email) values ('2', 'c@d.com');
insert into Person (Id, Email) values ('3', 'a@b.com');
题目描述

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

示例:

+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+

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

+---------+
| Email   |
+---------+
| a@b.com |
+---------+

说明:所有电子邮箱都是小写字母。

题解 方法一:使用 GROUP BY 和临时表

算法

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

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

+---------+-----+
| Email   | num |
+---------+-----+
| a@b.com |   2 |
| c@d.com |   1 |
+---------+-----+
2 rows in set (0.00 sec)

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

select Email from
(
  select Email, count(Email) as num
  from Person
  group by Email
) as statistic
where num > 1;

+---------+
| Email   |
+---------+
| a@b.com |
+---------+
1 row in set (0.00 sec)

方法二:使用 GROUP BY 和 HAVING 条件

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

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

select Email
from Person
group by Email
having count(Email) > 1;
+---------+
| Email   |
+---------+
| a@b.com |
+---------+
1 row in set (0.00 sec)

关注
打赏
1665558895
查看更多评论
立即登录/注册

微信扫码登录

0.7505s