加载中...
182-查找重复的电子邮箱(Duplicate Emails)
发表于:2021-12-03 | 分类: 简单
字数统计: 420 | 阅读时长: 1分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/duplicate-emails

英文原文

Table: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+
id is the primary key column for this table.
Each row of this table contains an email. The emails will not contain uppercase letters.

 

Write an SQL query to report all the duplicate emails.

Return the result table in any order.

The query result format is in the following example.

 

Example 1:

Input: 
Person table:
+----+---------+
| id | email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+
Output: 
+---------+
| Email   |
+---------+
| a@b.com |
+---------+
Explanation: a@b.com is repeated two times.

中文题目

编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。

示例:

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

根据以上输入,你的查询应返回以下结果:

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

说明:所有电子邮箱都是小写字母。

通过代码

官方题解

方法一:使用 GROUP BY 和临时表

算法

重复的电子邮箱存在多次。要计算每封电子邮件的存在次数,我们可以使用以下代码。

[d8EiS4CT-MySQL]
select Email, count(Email) as num from Person group by Email;
| Email   | num |
|---------|-----|
| a@b.com | 2   |
| c@d.com | 1   |

以此作为临时表,我们可以得到下面的解决方案。

[GeXvS7ji-MySQL]
select Email from ( select Email, count(Email) as num from Person group by Email ) as statistic where num > 1 ;

方法二:使用 GROUP BYHAVING 条件

GROUP BY 添加条件的一种更常用的方法是使用 HAVING 子句,该子句更为简单高效。

所以我们可以将上面的解决方案重写为:

[ShYdkDn6-MySQL]
select Email from Person group by Email having count(Email) > 1;

统计信息

通过次数 提交次数 AC比率
192529 242181 79.5%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
179-最大数(Largest Number)
下一篇:
183-从不订购的客户(Customers Who Never Order)
本文目录
本文目录