重複している要素をSQLで抜き出す(LeetCode Database)
LeetCodeにDatabaseのカテゴリがある話。
実はSQLの勉強にも使えるんですよね。
暇な時にEasyから潰したりしてます。
で、解くのはいいのですが、一度解いただけで解きっぱなしだとなんだかもったいない!
あれ?記事として書いてパターン化しておいたら楽なんじゃない?
と感じたので書いておきます。
問題
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
で一般化できるということですね。
今回はここまで。お疲れ様でした。
コメント
コメントを投稿