sql leetcode 182. Duplicate Emails

来源:互联网 发布:单片机应该怎么学 编辑:程序博客网 时间:2024/06/05 11:17

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

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

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

+---------+| Email   |+---------+| a@b.com |+---------+

Note: All emails are in lowercase.

这道题是一道sql题。大神这样做:

SELECT distinct p1.Email from Person p1INNER JOIN Person p2ON p1.Email = p2.EmailWHERE p1.Id <> p2.Id;
这道题有solution:https://leetcode.com/problems/duplicate-emails/solution/

Solution


Approach I: Using GROUP BY and a temporary table [Accepted]

Algorithm

Duplicated emails existed more than one time. To count the times each email exists, we can use the following code.

select Email, count(Email) as numfrom Persongroup by Email;
| Email   | num ||---------|-----|| a@b.com | 2   || c@d.com | 1   |

Taking this as a temporary table, we can get a solution as below.

select Email from(  select Email, count(Email) as num  from Person  group by Email) as statisticwhere num > 1;

Approach II: Using GROUP BY and HAVING condition [Accepted]

A more common used way to add a condition to a GROUP BY is to use the HAVING clause, which is much simpler and more efficient.

So we can rewrite the above solution to this one.

MySQL

select Emailfrom Persongroup by Emailhaving count(Email) > 1;


原创粉丝点击