どーも!
たかぽんです!
今回はDelete Duplicate Emailsという問題を行ってみました!
時初めて気づきましたが、これSQLの問題でした...w
みていきましょう!
Delete Duplicate Emails
さて、今回の問題は以下です。
簡単にご説明すると...
DBにidは異なるけど、入っているデータが全く同じ値になってしまっている場合があり、そういった被り項目がある場合、idが若い番号のものだけ残すようにdeleteします。
つまり、重複するカラムは消してしまえ!と言うわけです。
アルゴリズム
では、アルゴリズムを考えてみます...
行えばいいのはdelete作業ではあるんですが...
思ったよりも時間がかかりました...
最初は一つのテーブルでなんとかかんとかしようとしていたのですが、思いつかず...
最終的には同じテーブルを複製して利用する形になりました。
僕の場合の考え方としては、同じテーブル同士で比較を行い、値が等しく、なおかつidが古いカラムを消してあげる...というものです。
これに関しては聞くよりみた方がわかりやすそうなので、次節でみていただければと思います。
提出したコード
では、最後に僕が提出したコードを貼っておきます。
Runtime: 1689 ms, faster than 50.93% of MySQL online submissions for Delete Duplicate Emails.
Memory Usage: 0B, less than 100.00% of MySQL online submissions for Delete Duplicate Emails.
INNER JOINを使用することによって、自分自身の複製を条件として使えるようにしています。
そして、p1, p2でEmailが等しく、なおかつidが大きいもの...をdeleteの対象にしているわけですね。
# Write your MySQL query statement below
Delete p1 FROM Person p1 INNER JOIN Person p2
Where p1.Email=p2.Email and p1.Id > p2.Id
日付が変わってしまいましたが...
本日はここまで!
それでわ!