SQL で一意の日付値を持つ 2 つのテーブルをマージする
データ統合シナリオでは、類似した構造を持つがデータが重複する可能性のあるテーブルをマージすると、問題が発生する可能性があります。特に重複した値を処理する場合には、これが課題となります。次の 2 つのテーブルについて考えてみましょう。
CREATE TABLE Inbound ( Inbound_Date DATE, Product TEXT, InboundType TEXT, Quantity VARCHAR(255) ); CREATE TABLE Outbound ( Outbound_Date DATE, Product TEXT, OutboundType TEXT );
従来の UNION クエリを使用すると、これらのテーブルは次のようにマージできます。
SELECT Inbound_Date As Date, Product, SUM(Quantity) as Inbound, 0 as Outbound FROM Inbound GROUP BY 1,2 ) UNION ALL (SELECT Outbound_Date, Product, 0 as Inbound, COUNT("Outbound_Type") as Outbound FROM Outbound GROUP BY 1,2 ) ORDER BY 1,2;
ただし、このアプローチでは重複した日付が存在することができます。各日付を確実に一意にするために、UNION ALL と GROUP BY を使用するようにクエリを変更できます。
SELECT Date, Product, SUM(Inbound) as Inbound, SUM(Outbound) as Outbound FROM ((SELECT Inbound_Date As Date, Product, SUM(Quantity) as Inbound, 0 as Outbound FROM Inbound GROUP BY 1,2 ) UNION ALL (SELECT Outbound_Date, Product, 0 as Inbound, COUNT(*) as Outbound FROM Outbound GROUP BY 1,2 ) ) io GROUP BY Date, Product;
このクエリは、最初に UNION ALL 操作を実行して両方のテーブルの行を結合し、単一のセットを作成します。重複する日付と製品を含む行。次に、ネストされたクエリ ブロックを使用して、日付と製品の組み合わせごとに入荷数量と出荷数量の合計を計算します。最後に、GROUP BY 句を適用して重複する日付値を排除し、各日付が最終結果に 1 回だけ表示されるようにします。
その結果、変更されたクエリにより一意の日付を持つテーブルが生成され、これは役立つ場合があります。さらなる分析またはデータ操作タスク用。
以上が重複する日付を持つ 2 つの SQL テーブルをマージし、結果に一意の日付値が含まれるようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。