重複している行の特定と削除 sqlserver2019

重複している行の特定と削除 sqlserver2019

この記事を読むのに必要な時間は約 5 分です。

重複している行の特定と削除

特定

登録されているデータについて重複行が存在していると意図していない結果になって今う事があります。

対象データに重複データが存在していないか事前に確認する方法を見てみたいと思います。

サンプルデータの確認

サンプルデータは此方です。

前回の記事でサンプルデータを大量に登録していますので流用してみます。

このデータですね。

データとして面白そうな場所は kanji の列ですのでこの列に絞ってみたいと思います。

まずは表示するだけのSelect文です。

SELECT  [kanji] 
FROM  [test001].[dbo].[JIGYOSYO$]

ほい!

データが表示されました。

それではここから重複が存在しているかどうか確認してみたいと思います。

group by

重複の有無を確定して特定する方法は group by を使います。

group by は通常、グループ化で利用しますが、重複の特定でも使えます。

Select文は以下です。

SELECT  count([kanji]),kanji  FROM  [test001].[dbo].[JIGYOSYO$]  group  by  kanji

(株) NTTソルコ新百合ヶ丘センター

で、重複データが見つかりましたね。

ただ、大量のデータの中から特定するのは大変です。

そのため、以下のどちらかでデータを見やすくしたいと思います。

order by

単純に並び替えを行います。

sql文は以下の通りです。

SELECT  count([kanji]),kanji  FROM  [test001].[dbo].[JIGYOSYO$]  group  by  kanji  order  by  count([kanji])  desc

単純に並び替えただけですね。

大量の重複データが存在している事が分かりました。

order by を使う場合、特定する目的よりも確認するという目的になると思います。

※単純に次の having区よりも簡単なため

having区

次はhaving区です。

having区を使うと、厳密に重複しているデータのみを抽出してくれます。

sql文はこのようになります。

SELECT count([kanji]),kanji
FROM  [test001].[dbo].[JIGYOSYO$]
group  by  kanji
having  count([kanji])>1

この手法はデータの特性を理解している場合のみ利用可能です。

having区は group by でグループ化した結果に対して where区の様な条件指定ができます。

group by でグルーピングしたデータが2個以上であるデータは重複しているデータ

という、一見当たり前の事でもデータとして理解していなければこの方法にはたどりつけません。

 

削除

それでは実際に重複したデータをなくしてみたいと思います。

因みに方法自体は以下の記事と殆ど同じ内容です。

SQL重複削除 SQLServerのDistinctでの絞り方!
その他のデータベースでも方法は同じです。Distinctを活用して必要な情報のみに絞りましょう。ただし、絞る時には注意が必要です。本当の意味でそのデータは絞ってしまって良いデータなのか確認していますか?

 

distinct を使う

重複したデータについて

重複している事実をなくしたいだけ

なら、実は物凄く簡単です。

sql文は以下となります。

SELECT  distinct  kanji
FROM  [test001].[dbo].[JIGYOSYO$]

 

通常の一覧を表示させるSQL文がと比較して distinct と一文字付け加えるだけです。

  • SELECT distinct kanji FROM [test001].[dbo].[JIGYOSYO$]
  • SELECT               kanji FROM [test001].[dbo].[JIGYOSYO$]

これだけですね。

特定する方法を中心に考えると group by なり having なりといろいろ頭使いますが、重複を消すだけなら distinct の一文字を覚えておけば何とかなります!

 

 

 

 

 

タイトルとURLをコピーしました