SQL

重複データを取得するSQL

こんにちは ともです。

今回は誤って登録された重複データの取得方法について記載します。本来であれば重複しないテーブル構造を作る必要があります。しかし、シーケンスを使ってテーブル構成上値の重複を許しているケースもあると思われます。調査で重複したデータを調べる際にご利用ください。

重複データの構造

以下のようにシーケンスとユーザ名とカテゴリと点数を持っているユーザを例に説明します。

テーブル名はユーザテーブルとします。

シーケンスID(主キー) ユーザー名 カテゴリ 点数
1 山田太郎 文系 80
2 山田太郎 文系 80
3 山田太郎 文系 80
4 山田太郎 理系 60
5 山田太郎 理系 60
6 山田次郎 文系 70
7 山田次郎 理系 80

このデータからユーザとカテゴリ毎の重複データが何件あるか算出します。

ユーザー名 理系 件数
山田太郎 文系 3
山田太郎 理系 2

SQLは以下の通りです。グループ化を使ってデータを取得します。

    
    SELECT
       重複データ.ユーザー名
        , 重複データ.カテゴリ
        , カテゴリ.件数
      FROM
           (
               SELECT
                   ユーザー名
                   , カテゴリ
                   , COUNT(ユーザー名) AS 件数
                 FROM ユーザテーブル
                GROUP BY
                   ユーザー名
                   , カテゴリ
           ) 重複データ
     WHERE 重複データ.件数 >= 2

GROUP BYを使ってユーザとカテゴリ毎の件数を取得します。そのあと件数が2件以上のデータを条件に加えることで重複データと件数を取得することが出来ます。

コメント

0 件のコメント:

コメントを投稿

コメントをお待ちしています。