编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。
示例:
Id | |
---|---|
1 | a@b.com |
2 | c@d.com |
3 | a@b.com |
根据以上输入,你的查询应返回以下结果:
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去做的话 结果是有多条重复的会只保留一条,但同时不重复的记录也会保存下来 ,执行结果如下
a@b.com |
c@d.com |
这个时候我们就发现distinct并不满足我们题目的要求,然后我们思考下group by来做,首先分组的第一步就是把相同的合并,但这个时候结果会和distinct的结果一样,这个时候我们就需要用到having 与group by连用 并且要用到函数count() 对分组的结果进行处理,找寻出分组前条数大于1也就是重复的记录作为分组后的过滤条件.这样这一题就解决了.