私は3つのテーブルを持っています:
Project
PurchaseA
PurchaseB
プロジェクトのスキーマ:
id | user_id | title | description | create_date
PurchaseA のスキーマ:
id | project_id | amount | create_date
PurchaseB のスキーマ:
id | project_id | amount | create_date
Project
さまざまなプロジェクトを詳述する一意の行がたくさんあります。これらの各プロジェクトには、 と の両方に多くの行がPurchaseA
ありPurchaseB
ます。私がやりたいことはProject
、フィールドid
とからすべての行を選択することですが、 の関連レコードの合計とtitle
の関連レコードの合計の両方の合計も選択します。PurchaseA
PurchaseB
互いに独立して動作させることはできますが、結合が 2 つあると、数値が大幅に膨らんでしまいます。
望ましい結果
21732 Test Project A 84274.48
21747 Test Project B 18237.47
34714 Test Project C 183747.18
ここで、FLOATS を含む列は、PurchaseA
とからの関連する行の合計ですPurchaseB
。
編集
これが私の現在のSQLです:
select
projects.id,
projects.title,
COALESCE(SUM(PurchaseA.amount), 0) as pledgetotal,
COALESCE(SUM(PurchaseB.amount), 0) as purchasetotal
from
projects
left join
PurchaseA ON (PurchaseA.project_id = projects.id)
left join
PurchaseB ON (PurchaseB.project_id = projects.id)
left join
WHERE
projects.title IS NOT NULL
projects.end_date < NOW()
group by projects.id
テストデータ
Projects:
id title description create_date
623 Test Project A This is a test A 2013-01-01
624 Test Project B This is a test B 2013-01-02
PurchaseA
id project_id amount create_date
1 623 100 2013-01-02
2 623 125 2013-01-02
3 624 200 2013-01-03
4 623 150 2013-01-03
5 624 50 2013-01-04
PurchaseB
id project_id amount create_date
1 623 110 2013-01-02
2 624 105 2013-01-02
3 623 215 2013-01-03
4 623 100 2013-01-03
5 624 150 2013-01-04
ご覧のとおり、各プロジェクトには、関連する各テーブルに複数の行があります。各テーブルから合計を取得し、それらを合計したいと思います。