zoukankan      html  css  js  c++  java
  • 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 条件显示特定的组,也可以使用多个分组标准进行分组。
  • 相关阅读:
    OpenFire源码学习之二:Mina基础知识
    revel + swagger 文档也能互动啦
    Auto Layout 在iOS屏幕适配中的使用
    iOS小技巧
    一种简易的聊天泡泡设置颜色以及添加描边的方式
    做好交互应该克服哪些问题
    jQuery .on() 绑定事件无效
    浅谈iOS的Autolayout
    img 元素无法获取高度的问题
    简易自动化部署服务器集群
  • 原文地址:https://www.cnblogs.com/hider/p/11721166.html
Copyright © 2011-2022 走看看