前言
练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。
今日题目:
182.查找重复的电子邮箱
表:Person
| 列名 | 类型 |
|---|---|
| Column | type |
| id | int |
| varchar |
id是该表的主键(具有唯一值的列)。此表的每一行都包含一封电子邮件。电子邮件不包含大写字母。可以保证电子邮件的字段部位null。
我那不值一提的想法:
既然要查找重复邮件,那就直接count(email)> 1 ,找到数量大于一的邮件,那既然要聚合了,我们就需要group by,将邮件分组,然后再分组计数,由于题干中说邮件保证不为空,所以可以不用考虑空值,完事儿。
select email as Email
from Person
group by email
having count(email) > 1
那如果题目没加那句邮件不为空呢,可以直接加 is not null,就像这样。
select email as Email
from Person
where email is not null
group by email
having count(email) > 1
还有一种解法呢,就是表的自连接,通过join将表自连接,然后查找两个表id不同,但是邮箱相同的数据,注意这种方法前面需要加distinct去重,但是我个人感觉group by这种方法要简单一些,代码更简洁,也更容易想到。
select Distinct(p1.email) as Email
from Person p1 join Person p2
where p1.id <> p2.id and p1.email = p2.email
结果:
总结:
能运行就行。
本文介绍了如何通过SQL查询在LeetCode提供的Person表中查找重复的电子邮件地址,包括直接countemail,groupby分组计数,以及使用表自连接的方法。作者强调了在处理可能存在的空值时的处理方式。

940

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



