写点什么

数据库每日一题 --- 第 2 天:查找重复的电子邮箱

作者:知心宝贝
  • 2022 年 6 月 04 日
  • 本文字数:641 字

    阅读完需:约 2 分钟

数据库每日一题---第2天:查找重复的电子邮箱

一、问题描述

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


+----+---------+| Id | Email   |+----+---------+| 1  | a@b.com || 2  | c@d.com || 3  | a@b.com |+----+---------+
复制代码


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


题目链接:查找重复的电子邮箱

二、题目要求

样例

根据以上输入,你的查询应返回以下结果:
+---------+| Email |+---------+| a@b.com |+---------+
复制代码

考察

1.聚合函数2.建议用时10~25min
复制代码

三、问题分析

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

1.聚合函数

聚合函数就是分组的意思,将具有相同属性的目标值,根据给定的分组条件进行分组。


这里我们事先使用聚合函数group by把邮箱号相同的数据分成一组,以上面的样例为例,结果如下:


a@b.com  1 3-----------c@d.com  2
复制代码


通过分组之后的结果,使用having count进行具体的操作,筛选出值大于 1 的结果就是重复的电子邮箱。

2.自连接

自连接就是针对相同的表,进行相应的连接操作。我们预先定义两个 a b 都来自于 Person的数据,


第一步筛就是要预先选出表中不重复的电子邮件,随后和另一个变量对于的表进行遍历。如果满足电子邮件相同但 id 编号不同这样的两个条件,那么就是输出的结果我们要寻找的重复电子邮件。

四、编码实现

1.聚合函数

select  Emailfrom Persongroup by Email     -- 分组having count(*)>1  -- 筛选
复制代码

2.连接查询

select distinct a.Emailfrom Person as a,Person as bwhere a.Email=b.Email and a.Id!=b.Id
复制代码

五、测试结果



发布于: 刚刚阅读数: 3
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022.03.07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
数据库每日一题---第2天:查找重复的电子邮箱_数据库_知心宝贝_InfoQ写作社区