编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。
示例:
+----+---------+
| Id | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
根据以上输入,你的查询应返回以下结果:
+---------+
| Email |
+---------+
| a@b.com |
+---------+
说明:所有电子邮箱都是小写字母。
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/duplicate-emails
解题:
方法1:使用GROUP BY 和临时表,分组后判断每个组超过1一个就是有重复的。
首先查出,每个email有几个。
Selet Email,count(Email) as num
from Person
group by Email;
将上边的结果作为临时表。
select Email from
(
select Email, count(Email) as num
from Person
group by Email
) as statistic
where num > 1;
方法2:使用 GROUP BY 和 HAVING 条件
向 GROUP BY 添加条件的一种更常用的方法是使用 HAVING 子句,该子句更为简单高效。having用于组
select Email
from Person
group by Email
having count(Email) > 1;
相关知识:
count(*) 它返回检索行的数目, 不论其是否包含 NULL值。
count(DISTINCT 字段),返回不同的非NULL值数目。
临时表,类似于普通正常表一样。思路可以先建一个查询,结果就可以当作一个临时表,在查询这个临时表。
本文介绍如何使用SQL查询找出Person表中所有重复的电子邮箱,提供了两种方法:一是使用GROUP BY和临时表;二是直接利用GROUP BY和HAVING条件进行筛选。
3947

被折叠的 条评论
为什么被折叠?



