1. 程式人生 > >182. 查找重復的電子郵箱

182. 查找重復的電子郵箱

span for sql 子句 方法 說明 following sta clas

Write a SQL query to find all duplicate emails in a table named Person.

+----+---------+
| Id | Email   |
+----+---------+
| 1  | [email protected] |
| 2  | [email protected] |
| 3  | [email protected] |
+----+---------+

For example, your query should return the following for the above table:

+---------+
| Email   |
+---------+
| [email protected] |
+---------+

Note: All emails are in lowercase.


編寫一個 SQL 查詢,查找 Person 表中所有重復的電子郵箱。

示例:

+----+---------+
| Id | Email   |
+----+---------+
| 1  | [email protected] |
| 2  | [email protected] |
| 3  | [email protected] |
+----+---------+

根據以上輸入,你的查詢應返回以下結果:

+---------+
| Email   |
+---------+
| [email protected] |
+---------+

說明:所有電子郵箱都是小寫字母。


方法1:使用GROUP BY和臨時表

算法:重復的電子郵件存在多次。要計算每封電子郵件的存在時間,我們可以使用以下代碼。

1 select Email, count(Email) as num
2 from Person
3 group by Email;
| Email   | num |
|---------|-----|
| [email protected] | 2   |
| [email protected] | 1   |

以此作為臨時表,我們可以得到如下解決方案。

1 select Email from
2 (
3   select Email, count(Email) as
num 4 from Person 5 group by Email 6 ) as statistic 7 where num > 1 8 ;

方法2:使用GROUP BYHAVING條件

向a添加條件的一種更常用的方法GROUP BY是使用該HAVING子句,這更簡單,更有效。

所以我們可以重寫上面的解決方案。

1 select Email
2 from Person
3 group by Email
4 having count(Email) > 1;

182. 查找重復的電子郵箱