• 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 条件显示特定的组,也可以使用多个分组标准进行分组。
  • 相关阅读:
    docker私有仓库搭建及使用
    服务器ip迁移纪要
    Windows 下QT程序发布
    Prometheus监控软件部署方法
    android的listview控件,加了行内按钮事件导致行点击失效的问题
    惊奇!Android studio内部在调用Eclipse
    关于Android Stuido2.3和Eclipse4.4
    XCODE9.1的一些新问题
    osx12.6设置全屏
    IEEE754浮点数与字节数互转工具
  • 原文地址:https://www.cnblogs.com/hider/p/11721166.html
Copyright © 2020-2023  润新知