力扣白嫖日记(sql)

本文介绍了如何通过SQL查询在LeetCode提供的Person表中查找重复的电子邮件地址,包括直接countemail,groupby分组计数,以及使用表自连接的方法。作者强调了在处理可能存在的空值时的处理方式。

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

182.查找重复的电子邮箱
表:Person

列名类型
Columntype
idint
emailvarchar

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

结果:

在这里插入图片描述

总结:

能运行就行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值