182. 查找重複的電子郵箱

  • 2019 年 10 月 6 日
  • 筆記

題目

編寫一個 SQL 查詢,查找 Person 表中所有重複的電子郵箱。

示例:

+----+---------+  | Id | Email   |  +----+---------+  | 1  | [email protected] |  | 2  | [email protected] |  | 3  | [email protected] |  +----+---------+  根據以上輸入,你的查詢應返回以下結果:    +---------+  | Email   |  +---------+  | [email protected] |  +---------+  說明:所有電子郵箱都是小寫字母。  

題解

mysql查看重複數據, 可以按照email進行分組,然後使用having子句過濾count>1的數據,查詢的結果就是重複的數據

代碼

# 創建表  CREATE TABLE `Person` (    `id` int(11) NOT NULL,    `email` varchar(11) DEFAULT NULL,    PRIMARY KEY (`id`)  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;    # 插入測試數據  insert into Person (id,email) value (1,"[email protected]");  insert into Person (id,email) value (2,"[email protected]");  insert into Person (id,email) value (3,"[email protected]");    # 查找重複數據  select email from Person group by Email having count(email) > 1  

運行結果

總結

  • 當group by 與聚合函數配合使用時,功能為分組後計算
  • 當group by 與 having配合使用時,功能為分組後過濾,獲得滿足條件的分組的返回結果。
  • having與where區別:where過濾行,having過濾組