MySQL:如何从表中选择两个字段,以及两个相关表中的合计金额列?

MySQL:如何从表中选择两个字段,以及两个相关表中的合计金额列?,mysql,join,sum,Mysql,Join,Sum,我有三张桌子: 项目 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中都有许

我有三张桌子:

项目
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
中的相关记录总数

我可以让它彼此独立地工作,但当我有两个连接时,这些数字最终会被大量夸大

期望的结果

21732 Test Project A          84274.48
21747 Test Project B          18237.47
34714 Test Project C         183747.18
其中,带浮点数的列是
PurchaseA
PurchaseB
中相关行的总和

编辑

21732 Test Project A          84274.48
21747 Test Project B          18237.47
34714 Test Project C         183747.18
以下是我当前的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
如您所见,每个项目在每个相关表中都有多行。我想从每个表中获取总和,然后将它们相加。

您可以尝试以下方法(未测试):

您可以尝试以下方法(未测试):


我相信你的部分问题在于
项目
购买之间存在的一对多关系。
表格。我的建议是将
sum()
移动到子查询:

select 
    p.id,
    p.title,
    a.pledgetotal,
    b.purchasetotal
from projects p
left join
(
  select project_id, sum(amount) pledgetotal
  from PurchaseA
  group by project_id
) a
  ON (a.project_id = p.id)
left join
( 
  select project_id, sum(amount) purchasetotal
  from PurchaseB
  group by project_id
) b
  ON (B.project_id = p.id)
WHERE p.title IS NOT NULL;

请参见

我认为您的部分问题在于
项目
购买之间存在的一对多关系。
表格。我的建议是将
sum()
移动到子查询:

select 
    p.id,
    p.title,
    a.pledgetotal,
    b.purchasetotal
from projects p
left join
(
  select project_id, sum(amount) pledgetotal
  from PurchaseA
  group by project_id
) a
  ON (a.project_id = p.id)
left join
( 
  select project_id, sum(amount) purchasetotal
  from PurchaseB
  group by project_id
) b
  ON (B.project_id = p.id)
WHERE p.title IS NOT NULL;

请参见

请发布到目前为止您拥有的SQL查询您可以发布每个表的一些示例数据吗?请发布到目前为止您拥有的SQL查询您可以发布每个表的一些示例数据吗?这与标记为正确的答案相同,我只是不知道你在
WHERE
子句中想要什么当我运行yours时,所有字段都为NULL-his不是?这将为大多数行返回NULL这与标记为正确的答案相同,我只是不知道您在
WHERE
子句中想要什么当我运行你的时,所有字段都是空的-他的不是吗?工作就像一个冠军竖起大拇指工作就像一个冠军竖起大拇指