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
子句中想要什么当我运行你的时,所有字段都是空的-他的不是吗?工作就像一个冠军竖起大拇指工作就像一个冠军竖起大拇指