

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句を使っても重複するデータを取り除くこともできます。