ホームページ > データベース > mysql チュートリアル > 重複する日付を持つ 2 つの SQL テーブルをマージし、結果に一意の日付値が含まれるようにするにはどうすればよいですか?

重複する日付を持つ 2 つの SQL テーブルをマージし、結果に一意の日付値が含まれるようにするにはどうすればよいですか?

DDD
リリース: 2024-12-27 20:26:18
オリジナル
130 人が閲覧しました

How Can I Merge Two SQL Tables with Overlapping Dates and Ensure Unique Date Values in the Result?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート