LeetCode_database刷题记录(182. 查找重复的电子邮箱)

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

示例:

IdEmail
1a@b.com
2c@d.com
3a@b.com

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

Email
a@b.com

建表sql语句:

Create table If Not Exists Person (Id int, Email varchar(255))
Truncate table Person
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:

select email from Person group by email having count(email)>1

思路解析

首先看到去重,我们会想到分组,也会想到用distinct去做.先分析下这个题目,根据返回结果我们看到只查询出了重复的邮箱,那么如果我们用distinct去做的话 结果是有多条重复的会只保留一条,但同时不重复的记录也会保存下来 ,执行结果如下

Email
a@b.com
c@d.com

这个时候我们就发现distinct并不满足我们题目的要求,然后我们思考下group by来做,首先分组的第一步就是把相同的合并,但这个时候结果会和distinct的结果一样,这个时候我们就需要用到having 与group by连用 并且要用到函数count() 对分组的结果进行处理,找寻出分组前条数大于1也就是重复的记录作为分组后的过滤条件.这样这一题就解决了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值