SQL プログラミング

【DISTINCT】重複するデータを取り除くには

スポンサーリンク

SQLec06

頼れる人
データを取得したとき、どうしても重複するデータはいらないというときがあります
Excelでもできる重複データを削除するにはどうすればいいのかを教えるよ

ここだけ読めば重複するデータを取り除く方法がわかるようになるよ
ぴよちゃん

もうすでに重複データを除去する方法は知ってるよ!という人は、ここは読まなくていいですよ
こけさん

DISTINCTによる重複データを除外する

テーブルよりデータを取得したとき、同じ値をもつカラムのデータが連続して表示されることがあります。
その中から同じ値は除外して1レコード分だけにしたいときには、DISTINCTを使用します。

テーブルからそのまま取得したカラムの値でも、関数を利用して加工した場合でも、同じ値のデータは除外されて1レコード分だけに集約されます。

商品テーブルより、商品に対する性別だけを取得するとき、DISTINCTには性別を指定します。

// 商品テーブルより、性別ID [sexid] の重複データを除外して取得
SELECT DISTINCT
       sexid
FROM product
ORDER BY 1;

// 2
// 3

複数のカラムが対象となるときには、カンマ区切りでつなげて指定するだけでOKです。

// 商品テーブルより、性別ID [sexid] と金額 [amount] の重複データを除外して取得
SELECT DISTINCT
       sexid
      ,amount
FROM product
ORDER BY 1,2;

// 2,8000
// 2,10000
// 3,5000
// 3,11000

GROUP BYによる重複データを除外する

重複データを除外するもう1つの方法としては、GROUP BYを使用します。
GROUP BYを使用するときは、基本的にあるカラムでグルーピングして集計するために利用しますが、重複データを除外することもできます。

// 商品テーブルより、性別ID [sexid] と金額 [amount] の重複データを除外して取得
SELECT sexid
      ,amount
FROM product
GROUP BY sexid, amount
ORDER BY 1,2;

// 2,8000
// 2,10000
// 3,5000
// 3,11000

集計関数と一緒に使う

先ほどは商品テーブルより、商品に対する性別だけを取得した結果、2レコードが取得できました。
商品に対する性別が何種類あるのかを取得したいときには、集計関数のCOUNTとDISTINCTを組み合わせて使います。
性別が何種類あるのかを求めたいので、COUNTに性別を指定すればいいのですが、これだと商品テーブルに性別IDが入っているレコードの件数(5)が返ってきます。

性別の重複データ分を除外した件数を取得してあげれば、商品に対する性別が何種類あるのかを求められます。

// 商品テーブルより、性別ID [sexid] が何種類あるのかを取得
SELECT COUNT(DISTINCT sexid)
FROM product;

// 2         // 2種類

複数のカラムが対象となるときには、カンマ区切りでつなげて指定すると、SQLエラーとなります。
DISTINCTの中に指定できるのは1カラム分のみです。
なので、複数のカラムをバーティカルバー(| )2つつなげて文字連結したのを、DISTINCTで指定します。

// 商品テーブルより、性別ID [sexid] と金額 [amount] が何種類あるのかを取得
SELECT COUNT(DISTINCT sexid || amount)
FROM product;

// 4         // 4種類

複数のカラムが対象となるとき、カラム値をつなげても正しく結果を取得できないケースがあります。
カラム1が [AB] とカラム2が [123] をつなげたときと、カラム1が [AB1] とカラム2が [23] をつなげたときは、同じ文字列になってしまうため、本来は別々のパターンとなるべきなのに、1でカウントされてしまいます。このようなときには、副問い合わせを使うことで簡単にできます。

// 商品テーブルより、性別ID [sexid] と金額 [amount] が何種類あるのかを取得
SELELCT COUNT(1)
FROM (
  SELECT DISTINCT
         sexid
        ,amount
  FROM product
) A

// 4         // 4種類

まとめ

重複するデータを取り除くには、DISTINCTを使います。
DISTINCTでは1つのカラムだけではなく、複数のカラムを指定することができます。
ただし、集計関数と合わせて使うときには、カラムは1つのみ指定することができます。

GROUP BY句を使っても重複するデータを取り除くこともできます。

▶ 一覧に戻る

    スポンサーリンク

    -SQL, プログラミング

    PAGE TOP

    © 2021 ちょこぱいぶろぐ Powered by AFFINGER5