Leetcode 182. Duplicate Emails

182. Duplicate Emails

原题目链接:182. Duplicate Emails

写一条SQL查询语句找出在Person表中所有的重复邮箱。

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

举个例子,对于上述表格,你的查询语句返回以下数据:

+---------+
| Email   |
+---------+
| a@b.com |
+---------+
**注意**:所有的邮箱地址用小写表示。 # Solution ## 方法一:采用`GROUP BY`语句和临时表[Accepted] ### Algorithm 重复邮箱是指超过一次即为重复。为了计算每一个邮箱出现的次数,我们可以采用以下的代码。
1
2
3
SELECT Email, COUNT(Email) as num
FROM Person
GROUP BY Email;
结果如下:
| Email   | num |
|---------|-----|
| a@b.com | 2   |
| c@d.com | 1   |

然后将这个作为一个临时表,我们可以得到以下的解法。

MySQL

1
2
3
4
5
6
7
8
SELECT Email FROM
(
SELECT Email, COUNT(Email) as num
FROM Person
GROUP BY Email
) AS statistic
WHERE num > 1
;

方法二:采用GROUP BYHAVING条件[Accepted]

Algorithm

另外一个更加常用的方法是在GROUP BY语句后面加一个HAVING语句来增加条件,更加简洁,更加高效。

因此我们可以将代码改写如下:

MySQL

1
2
3
4
5
SELECT Email
FROM Person
GROUP BY Email
HAVING COUNT(Email) > 1
;