【小题狂练】SQL语句:查找重复的电子邮箱
此为 LeetCode 上 2021-11-07 的每日一题:【182. 查找重复的电子邮箱】
1.题目描述
编写一个 SQL 查询,查找 Person
表中所有重复的电子邮箱。
示例:
1 | Create table If Not Exists Person (id int, email varchar(255)) |
+----+---------+
| Id | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
根据以上输入,你的查询应返回以下结果:
+---------+
| Email |
+---------+
| a@b.com |
+---------+
说明:所有电子邮箱都是小写字母。
2.题解
【解法一】:借助HAVING语句+聚合函数
1 | select Email |
使用 group by
对Email分组,
然后 having
用于分组后的过滤,
其中 count(Email)
对其计数。
having 和 where的区别,where的执行在分组前,having在分组后
【解法二】:自连接
1 | select DISTINCT P1.Email |
或
1 | select distinct p1.email |
【解法三】:子表查询
1 | -- 先计数,再查询 |
题外问答:SQL语句一定要大写吗?
不用非写成大写,SQL语句对大小写不敏感。但是,编译的时候,操作系统会将所有字符转换成大写的,再进行编译。如果大写,在编译的时候,可以节省转化的时间。当SQL语句大量的时候,就显得很重要了。在大型的ERP系统开发的时候,往往会这么要求。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 百里飞洋!
若存在错误或不当之处,还望兄台不吝赐教,期待与您交流!
评论