重複している要素をSQLで抜き出す(LeetCode Database)

LeetCodeにDatabaseのカテゴリがある話。

実はSQLの勉強にも使えるんですよね。
暇な時にEasyから潰したりしてます。

で、解くのはいいのですが、一度解いただけで解きっぱなしだとなんだかもったいない!
あれ?記事として書いてパターン化しておいたら楽なんじゃない?
と感じたので書いておきます。

問題

182. Duplicate Emails

PersonテーブルのEmail列に重複する文字列が存在するのでそれを抜き出して欲しい、という問題ですね。

±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+

仮に上記のテーブルなら以下の形で返すようにクエリを設計してください。

±--------+
| Email |
±--------+
| a@b.com |
±--------+

注意: Email列は全て小文字です。

解法

# Write your MySQL query statement below
SELECT Email
FROM Person
GROUP BY Email
HAVING COUNT(Email) > 1

重複というのはつまり二つ以上存在する、ということなのでGROUP BYで分類します。
その後に条件(HAVING句)として上記の重複の条件を集計関数であるCOUNTで数え上げを行えば無事完了です。

つまり、重複する要素だけを抜き出したいときは

# Write your MySQL query statement below
SELECT カラム
FROM テーブル
GROUP BY カラム
HAVING COUNT(カラム) > 1

で一般化できるということですね。

今回はここまで。お疲れ様でした。

コメント

このブログの人気の投稿

Braveブラウザの同期機能をiPhoneで設定した話。

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した

failed: unable to get local issuer certificate (_ssl.c:1123)と出たので解決した話