SQL で重複値に対処する方法
SQL で重複値を処理するのは面倒な作業になる場合があります。しかし心配する必要はありません。このガイドはあなたの負担を軽減するためにここにあります。
データにはあらゆる形式がありますが、重複レコードはどのデータ形式でも重要な部分を占めています。 Web ベースのデータを扱う場合でも、トラックに積まれた販売データを単にナビゲートする場合でも、値が重複すると分析が歪んでしまいます。
SQL を使用して数値を処理し、データ スタックに対して長いクエリを実行しますか? 「はい」の場合、SQL 重複の管理に関するこのガイドは、あなたにとって非常に喜ばしいものとなるでしょう。
SQL を使用して重複を管理するために使用できるいくつかの方法を次に示します。
1. Group by 関数を使用した重複のカウント
SQL は、計算を簡素化するさまざまな関数を提供する多面的なプログラミング言語です。 SQL の集計関数の経験が豊富であれば、group by 関数とそれが何に使用できるかについてはすでによく知っているかもしれません。
group by 関数は最も基本的な SQL コマンドの 1 つであり、sum や count< などのさまざまな集計関数を使用できるため、複数のレコードを処理するのに最適です。、average、およびその他の多くの関数をgroup by 関数と組み合わせて、個別の行ごとの値を取得します。
シナリオに応じて、グループ化関数を使用して単一列または複数列内で重複を検索できます。
a.単一列内の重複を数える
ProductID と Orders の 2 つの列を含む次のデータ テーブルがあるとします。
ProductID
注文
2
7
2
8
2
-
10
9
6
10
1
10
5
12
5
12
-
12
12
7
14
1
14
1
47
4
47
4
重複する製品 ID を見つけるには、次のようにgroup by 関数と having 句を使用して集計値をフィルタリングできます。
select productid, count(productid) as Total_count
from sahil.product_dups
group by productid
having count(productid) > 1
order by productid;
一般的な SQL ステートメントと同様に、最終結果に表示する列を定義することから始める必要があります。この場合、ProductID 列内の重複する値の数を表示したいと考えています。
最初のセグメントでは、select ステートメント内の ProductID 列を定義します。 SQL がクエリの目的を理解できるように、count 関数は ProductID 参照に従います。
次に、from 句を使用してソース テーブルを定義します。 count は集計関数であるため、group by 関数を使用して類似した値をすべてグループ化する必要があります。
重要なのは、重複する値を ProductID 列内にリストすることです。これを行うには、カウントをフィルタリングして、列内に複数回出現する値を表示する必要があります。 having 句は、集計されたデータをフィルタリングします。条件 (count(productid) >1) を使用すると、目的の結果を表示できます。
最後に、order by 句により、最終結果が昇順で並べ替えられます。
出力は次のとおりです。
b.複数の列の重複をカウントする
複数の列の重複をカウントしたいが、複数の SQL クエリを記述したくない場合は、いくつかの調整を加えて上記のコードを拡張できます。たとえば、複数の列に重複する行を表示する場合は、次のコードを使用できます。
select productid, orders, count(*) as Total_count
from sahil.product_dups
group by productid, orders
having count(productid) > 1
order by productid;
出力では、2 行のみが表示されていることがわかります。クエリを微調整し、select ステートメント内に両方の列の参照を追加すると、重複した値を持つ一致する行の数が取得されます。
重複行を取得するには、count(column) 関数の代わりに count(*) 関数を渡す必要があります。 * 関数はすべての行を切り替えて、個々の重複値ではなく重複行を検索します。
出力を以下に示します。
注文値が同じであるため、製品 ID 14 と 47 の対応する行が表示されます。
2. row_number() 関数による重複のフラグ付け
group by と having の組み合わせは、テーブル内の重複を見つけてフラグを立てる最も簡単な方法ですが、row_number() を使用して重複を見つける別の方法もあります。機能です。 row_number() 関数は SQL ウィンドウ関数カテゴリの一部であり、クエリを効率的に処理するために不可欠です。
row_number() 関数を使用して重複にフラグを立てる方法は次のとおりです。
select productid, orders,
row_number() over (partition by productid order by productid) as sno
from sahil.product_dups;
row_number() 関数は、各製品 ID 値を調べて、各 ID の繰り返しの数を調べます。 partition キーワードは重複する値を分離し、1、2、3 などの値を時系列に割り当てます。
partition キーワードを使用しない場合、すべての製品 ID に一意のシリアル番号が割り当てられることになり、目的に合いません。
パーティション セクション内のorder by 句は、並べ替え順序を定義するときに機能します。昇順 (デフォルト) と降順のどちらかを選択できます。
最後に、列にエイリアスを割り当てて、後で (必要に応じて) フィルタリングしやすくすることができます。
3. SQL テーブルからの重複行の削除
テーブル内の重複値は分析を歪める可能性があるため、多くの場合、データ クリーニング段階で重複値を削除することが不可欠です。 SQL は、重複した値を効率的に追跡および削除する方法を提供する貴重な言語です。
a.個別のキーワードの使用
distinct キーワードは、テーブル内の重複値を削除するためにおそらく最も一般的で頻繁に使用される SQL 関数です。単一の列から重複を削除したり、重複した行を一度に削除したりできます。
単一の列から重複を削除する方法は次のとおりです。
select distinct productid from sahil.product_dups;
出力は、テーブルからすべての一意の製品 ID のリストを返します。
重複した行を削除するには、上記のコードを次のように調整します。
select distinct * from sahil.product_dups;
出力は、テーブル内のすべての一意の行のリストを返します。出力を見ると、製品 ID 14 と 47 が最終結果テーブルに 1 回だけ表示されていることがわかります。
b.共通テーブル式 (CTE) メソッドの使用
Common Table Expression (CTE) メソッドは、主流の SQL コードとは少し異なります。 CTE は SQL の一時テーブルに似ていますが、唯一の違いは、仮想テーブルであり、クエリの実行中にのみ参照できることです。
最大の利点は、これらのテーブルはクエリが実行されるとすぐに存在しなくなるため、後でこれらのテーブルを削除するために別のクエリを渡す必要がないことです。 CTE メソッドを使用すると、以下のコードを使用して重複を検索して削除できます。
with cteproducts as
(select productid, orders,
row_number() over (partition by productid order by productid) as sno
from sahil.product_dups)
select * from cteproducts
where sno = 1;
CTE 関数は、with キーワードを使用して呼び出すことができます。 with キーワードの後に一時仮想テーブルの名前を定義します。 CTE テーブル参照は、テーブルの値をフィルタリングするときに役立ちます。
次のパートでは、row_number() 関数を使用して製品 ID に行番号を割り当てます。各プロダクト ID をパーティション 関数で参照しているため、各繰り返し ID は個別の値を持ちます。
最後に、別のselect ステートメントを使用して、最後のセグメントに新しく作成されたsno 列をフィルターします。最終出力で一意の値を取得するには、このフィルターを 1 に設定します。
SQL の使い方を簡単に学ぶ
SQL とその亜種は、リレーショナル データベースをクエリして使用する本来の機能により、話題になっています。単純なクエリの作成からサブクエリを使用した複雑な分析の実行まで、この言語にはあらゆる機能が少しずつ備わっています。
ただし、クエリを作成する前に、スキルを磨き、コードを解読して熟練したプログラマーになる必要があります。知識をゲームに実装することで、SQL を楽しく学ぶことができます。コードにちょっとした楽しみを加えて、派手なコーディングのニュアンスを学びましょう。