[LeetCode] 182.查找重复的电子邮箱

 ̄綄美尐妖づ 提交于 2020-03-12 07:03:48

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

示例

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

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

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

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

题解:

方法一:使用 GROUP BY和临时表
算法
重复的电子邮箱存在多次。要计算每封电子邮件的存在次数,我们可以使用以下代码。

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

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

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

方法二:使用 GROUP BYHAVING 条件
GROUP BY 添加条件的一种更常用的方法是使用 HAVING 子句,该子句更为简单高效
所以我们可以将上面的解决方案重写为:

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

摘自:
https://leetcode-cn.com/problems/duplicate-emails/solution/cha-zhao-zhong-fu-de-dian-zi-you-xiang-by-leetcode/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!