Leetcode 182重複する電子メールを検索する

2483 ワード

1.タイトルの説明
2.テーマの核心内容の解釈:
テーブルのデータを再確認し、セクションを投影します.
3.解答方法
  • 両表を直接操作
  • select distinct p1.Email
    from Person p1, Person p2
    where 
    p1.Email=p2.Email and p1.id<p2.id;
    

    コードは簡単で、小さな細部に注意する必要があります.p 1.id欠点:distinctは時間がかかり、2表のデカルト積も時間がかかり、最終的には342 msかかる.
  • テンポラリテーブルプラスパケット
  • select Email
    from
    (
        select Email, count(Email) as c
        from person
        group by Email
    ) as t
    where t.c>1;
    

    知識点は,テンポラリテーブルとgroupbyの2つであり,テンポラリテーブルにより各emailのカウントを統計し,カウントを判断することを構想している.欠点:効率は依然として低く、314 msの時間がかかる
  • groupbyにhaving
  • を加える
    select Email 
    from person group by Email having count(Email)>1;
    

    グループbyによりパケット化し,distinctの存在に代わってhaving中の集約関数によりパケットをフィルタリングし,効率を大幅に向上させた.時間は145 msしかかかりません
    締めくくり
    以上の方法に加えて、sql文に異なる位置でリターンを加えると、sqlサーバがsql文解析に与える影響が大きいという小さな問題を発見しました.