0


【LeetCode-SQL每日一练】—— 182. 查找重复的电子邮箱

🎈写在前面

🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟【数据库】打交道的,为了更好的操作数据库,我们的SQL【知识储备】是必不可少的。想要掌握好SQL,那少不了每天的练习与学习。接下来小梦会带领小伙伴们一起每天刷一道LeetCode-数据库(SQL)相关的题目,然后在文章后例举相关知识点帮助小伙伴们学习与巩固,更好的掌握SQL。

🙋‍♂️ 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽。


🍕题目概述

题目:

编写一个 SQL 查询,查找 **

Person

** 表中所有重复的电子邮箱。

Person表

+----+---------+
| Id | Email   |
+----+---------+
| 1  | [email protected] |
| 2  | [email protected] |
| 3  | [email protected] |
+----+---------+

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

+---------+
| Email   |
+---------+
| [email protected] |
+---------+

🍕解题思路

    其实这道题很简单啦,相信小伙伴们心中已经知道该怎么做了,赶紧去LeetCode挥笔写下答案测试一番吧!!测试完可以再看看小梦与大家的思路是否一致呢,如果有多种思路,欢迎留言写下你们的思路与解法,大家互相学习学习~

    根据题意,要找出表中所有重复的电子邮箱,也就是**Email字段**对应的数据有重复的我需要查找出来。那我们可以使用**count函数**来获取Email中各电子邮箱的数量,只要数量大于1就是题目中要求的。接下来,根据该思路,小梦列出一下三种解法,小伙伴们如果有其它思路,欢迎补充~

🍟方法1

我们可以先查出Email和对应Email的个数,把查出的内容当作一个临时表,在通过查该临时表,找出Email数量大于的1的,这样我们就查找出了题目所要求的【找出表中所有重复的电子邮箱】。

题解:

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

🍟方法2

我们可以通过group by对Email进行分组,然后通过having进行条件筛查,having后面可以运用聚合函数非常方便(知识点小结部分会有group by与having的简单讲解,小伙伴们记得查阅哦~)。通过聚合函数count(Email)在having后进行条件筛查,找出Email个数大于1的,这样我们就查找出了题目所要求的【找出表中所有重复的电子邮箱】。

题解:

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

🍟方法3

第三种方法大家可以发散一下思维,如果不用count函数怎么知道重复的Email呢?怎么查呢?小梦来带小伙伴们一起思考,首先我们可以想想,前两种方法实质上都是通过查出Email数判断是否大于1,大于1就是我们所要的答案,不大1就不是。那大家有没有注意表Person虽然Email有重复的,但是id是唯一的,那我们就可以把Person表看成两张表,一张a表和一张b表。连接两张表,where语句后面加上a表的Email等于b表的Email和a表的id不等于b表的id。然后查询Email做去重操作,就得到了我们想要的答案。

题解:

select distinct  a.Email from Person a,Person b where a.Email = b.Email and a.id <> b.id;

🍕代码执行测试

🍟方法1

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

输入题解,进行测试

** 测试成功!**

🍟方法2

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

输入题解,进行测试

** 测试成功!**

🍟方法3

select distinct  a.Email from Person a,Person b where a.Email = b.Email and a.id <> b.id;

输入题解,进行测试

**测试成功! **


🍕知识点小结

通过今天这一道题,小梦觉得有个知识点是需要简单分享一下的,那就是gruop by子句和having子句。group by与having的语法什么的小梦在这里就不一一细说了,小梦简单说一下group by与having在使用时一些需要注意的地方,希望小伙伴们用心记下来,绝对有用!

GROUP BY(数据分组)与HAVING子句

SQL中的数据可以按列名分组,可以搭配聚合函数一起使用,方便我们对于数据的查询与获取。

例:

SELECT count(stuname) FROM student GROUP BY student_class;

使用GROUP BY分组语句可以与WHERE语句一起使用,当然这里有个非常重要的地方希望小伙伴们记下来,非常重要!->当一条SQL中有聚合函数,WHERE语句,GRUOP BY语句时,他们的执行顺序是怎么的呢?WHERE >GROUP BY>聚合函数。

所以在WHERE语句执行过滤条件中我们不能使用聚合函数,使用的话就会报错,在这我们可以使用HAVING子句执行过滤条件筛查时使用聚合函数。小伙伴们一定要记住!


最后呢小梦再分享一下SQL查询语句各关键字的执行顺序,可以拿小本本记一下了,有用的很~

【重点】SQL的执行顺序:

  1. 先执行FROM
  2. 再执行WHERE条件过滤
  3. 再执行GROUP BY分组
  4. 再执行SELECT,聚集函数
  5. 再执行HAVING条件过滤
  6. 再执行ORDER BY 排序

标签: 数据库 sql database

本文转载自: https://blog.csdn.net/weixin_42306958/article/details/122652593
版权归原作者 _超 梦 所有, 如有侵权,请联系我们删除。

“【LeetCode-SQL每日一练】&mdash;&mdash; 182. 查找重复的电子邮箱”的评论:

还没有评论