ホームページ >データベース >mysql チュートリアル >サブクエリを使用して SQL の複数のテーブルからデータを正しく集計する方法

サブクエリを使用して SQL の複数のテーブルからデータを正しく集計する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-01 13:44:11207ブラウズ

How to Correctly Aggregate Data from Multiple Tables in SQL Using Subqueries?

複数のテーブルからデータを集計する SQL クエリ

SQL では、さまざまな手法を使用して複数のテーブルからデータを集計できます。以下に、2 つのテーブルのデータを結合するクエリのシナリオとソリューションを示します。

シナリオ:

両方に列 [PROJECT] が含まれる 2 つのテーブル AP と INV について考えます。と[値]。目標は、両方のテーブルから各プロジェクトの [値] の合計を計算する結果を取得することです。結果は次の形式になります:

PROJECT | SUM_AP | SUM_INV
---------+--------+--------
XXXXX   | 500    | 800

不正なクエリ:

次のクエリが試行されましたが、結果は不正確でしたsums:

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]

結果が正しくない理由:

間違ったクエリにより、合計を適用する前に値がグループ化され、重複したプロジェクト値が合計に含まれることになります。

正しい解決策:

宛先この場合、サブ選択を含むクエリを使用できます。

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]

このクエリは、サブ選択を利用して各プロジェクト内の合計を個別に計算し、値の重複の問題を排除し、正しい集計結果を提供します。

以上がサブクエリを使用して SQL の複数のテーブルからデータを正しく集計する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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