一、題目名稱sql
Duplicate Emails(重複出現的Email)數據庫
二、題目地址命令行
https://leetcode.com/problems/duplicate-emails/code
三、題目內容leetcode
有一個數據表包括Id和Email兩列,找出數據表內Email列內容重複出現的Email數據。get
例如,現有一個表Person內容以下:class
+----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+
那麼查詢獲得的結果集爲:email
+---------+ | Email | +---------+ | a@b.com | +---------+
四、初始化數據庫腳本數據
在MySQL數據庫中創建一個名爲LEETCODE的數據庫,用MySQL命令行中的source命令執行下面腳本:腳本
-- 執行腳本前必須創建名爲LEETCODE的DATABASE USE LEETCODE; DROP TABLE IF EXISTS Person; CREATE TABLE Person ( Id INT NOT NULL PRIMARY KEY, Email VARCHAR(50) ); INSERT INTO Person (Id, Email) VALUES (1, 'a@b.com'); INSERT INTO Person (Id, Email) VALUES (2, 'c@d.com'); INSERT INTO Person (Id, Email) VALUES (3, 'a@b.com'); INSERT INTO Person (Id, Email) VALUES (4, 'x@y.com'); INSERT INTO Person (Id, Email) VALUES (5, 'x@y.com');
五、解題SQL1
以Email列對數據進行分組,找出全部組內數據數量大於1的Email
SELECT DISTINCT Email FROM Person GROUP BY Email HAVING COUNT(*) > 1
六、解題SQL2
換一個角度考慮,若是兩行數據,Id不一樣,Email相同,則選出這個Email,再對選出的全部Email進行去重。
SELECT DISTINCT A.Email FROM Person AS A, Person AS B WHERE A.Id <> B.Id AND A.Email = B.Email
END