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

题目链接:https://leetcode-cn.com/problems/duplicate-emails/

题目

编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。

示例:

+----+---------+
| Id | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
根据以上输入,你的查询应返回以下结果:

+---------+
| Email |
+---------+
| a@b.com |
+---------+
说明:所有电子邮箱都是小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/duplicate-emails
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

---- oracle ----
/* Write your PL/SQL query statement below */
select Email
from Person
group by Email
having count(Email) > 1  ---- 2741ms
---- oracle ----
/* Write your PL/SQL query statement below */
select Email
from Person
group by Email
having count(1) > 1 ---- 1012ms
---- oracle ----
/* Write your PL/SQL query statement below */
select Email
from
(
    select Email, count(1) as cnt
    from Person
    group by Email
) b
where b.cnt > 1 ---- 564ms

思考

一样的代码,一样的提交,不一样的速度?

是不是跟网速有关?

Oracle & MySQL都不能放弃,都要学习,虽然常用语法相同,但某些具体函数的用法还是不太一样,必须掌握。

结论:使用group byhaving,记得优先顺序。

注意事项

  1. where 后不能跟聚合函数,因为where执行顺序大于聚合函数。
  2. where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
  3. having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
posted @   Hider1214  阅读(356)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示