SQL题:查找重复邮件 (源自Leecode,链接182.查找重复邮件)
题目描述:编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。
那么Person表的架构在这里(此为已知信息)
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')
对应的视化表:
±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+
查找 Person 表中所有重复的电子邮箱,应输出的
±--------+
| Email |
±--------+
| a@b.com |
±--------+
- 最原始想到用 WHERE IS NOT DISTINCT 来选出不独有的行 不行
- 看题解得知可用 GROUP BY(分组)+ HAVING(num > 1) 可行
SELECT Email
FROM Person
GROUP BY Email
HAVING count(Email) > 1
*为什么count不能替换成sum呢 *( a@b.com会不显示)
- 潜下心来研究更优美的一种题解
SELECT Email
FROM(
SELECT Email , count(Email) AS num
FROM Person
GROUP BY Email
) AS Zoe
WHERE num > 1
DoNe