ホームページ >データベース >mysql チュートリアル >SQL で複数のテーブルから SUM を正確に計算するにはどうすればよいですか?

SQL で複数のテーブルから SUM を正確に計算するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-30 11:43:15885ブラウズ

How Can I Accurately Calculate SUMs from Multiple Tables in SQL?

SUM 計算のための複数のテーブルのクエリ

リレーショナル データベースのコンテキストでは、複数のテーブルにわたるデータの集計が必要になるのが一般的です。これは、値を要約したり総計を計算したりする場合に特に便利です。ただし、正確な結果を保証するには、データ要約の原則を理解することが重要です。

そのようなシナリオの 1 つは、[PROJECT] という名前の共通列を共有する 2 つのテーブル (AP と INV) をクエリするときに発生します。目的は、主キーとして PROJECT と、AP テーブルと INV テーブルの各プロジェクトの Value 列の合計を表す 2 つの集計列 SUM_AP と SUM_INV を含む結果セットを返すことです。

一般的なアプローチこの問題に対処するには、次のコードに示すように INNER JOIN 操作を使用します。

SELECT AP.[PROJECT],
SUM(AP.Value) AS SUM_AP, 
SUM(INV.Value) AS SUM_INV
FROM AP INNER JOIN INV ON (AP.[PROJECT] =INV.[PROJECT])
WHERE AP.[PROJECT] = 'XXXXX'
GROUP BY AP.[PROJECT]

ただし、このクエリは間違った結果を返します。グループ化操作 (GROUP BY) は、合計 (SUM) の前に適用されます。その結果、合計に重複した値が含まれ、合計が膨らむことになります。

この問題を解決するには、より正確な方法は、サブ選択を使用してテーブルごとに個別に集計を実行することです。

SELECT 
    AP1.[PROJECT],
    (SELECT SUM(AP2.Value) FROM AP AS AP2 WHERE AP2.PROJECT = AP1.PROJECT) AS SUM_AP,
    (SELECT SUM(INV2.Value) FROM INV AS INV2 WHERE INV2.PROJECT = AP1.PROJECT) AS SUM_INV
FROM AP AS AP1 
    INNER JOIN INV AS INV1 
        ON (AP1.[PROJECT] =INV1.[PROJECT])
WHERE AP1.[PROJECT] = 'XXXXX'
GROUP BY AP1.[PROJECT]

この改訂されたクエリでは、SUM 関数内でサブ選択を使用して、各プロジェクトの SUM_AP と SUM_INV の値を計算します。サブ選択は、一致する PROJECT 値に基づいて各テーブルの Value 列を個別に集計し、重複する値の問題を排除します。

このアプローチを利用すると、複数のテーブルを効果的にクエリし、正確な集計操作を実行して取得することができます。間違った計算を行わずに、目的の要約結果が得られます。

以上がSQL で複数のテーブルから SUM を正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。