解决在编写一个 SQL 查询,查找表中所有重复数据
先看问题
意思就是把第一个表中的所有重复的Email筛选出来,输出为第二个表那样。
小朋友理解(分析题目)
题目的本质就是:一个元素出现重复,就说明这个元素出现的次数是大于等于2的,所以我们先把表中所有元素的个数统计出来,只需要通过
元素个数>1
来筛选出重复元素
开始动手
这里有两种方法,本质都是上述小朋友理解的那样
方法一
我们先要建一个统计元素个数的表(代码一部分,最后结合在下面)
select Email,count(Email) as num //把Email定义为数,count是常量的意思
from Person //Email来自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;//元素个数大于1筛选
方法二
直接使用group by 和 having 使用
更加高效,大家直接记住便于下次使用
一行代码很好记的
select Email from Person Group by Email having count(Email)>1;
本文借鉴使用力扣官方解题思路,这是作者的第一篇学习记录,大家不喜勿喷。