MySQL使用多个表中的数字进行多次求和
假设我有两个表,一个存储帐户,一个存储事务:MySQL使用多个表中的数字进行多次求和,mysql,Mysql,假设我有两个表,一个存储帐户,一个存储事务: id acct_name opening_bal 1 checking 1029.99 2 savings 2002.19 ... 及 例如,交易表第99行表示,12.15已于2018年1月21日从支票转移到储蓄 我想写一个查询,返回给定日期(如今天或2018年10月12日等)的所有账户及其余额,如下所示: acct balance checking 1599.21 savings 2
id acct_name opening_bal
1 checking 1029.99
2 savings 2002.19
...
及
例如,交易表第99行表示,12.15已于2018年1月21日从支票转移到储蓄
我想写一个查询,返回给定日期(如今天或2018年10月12日等)的所有账户及其余额,如下所示:
acct balance
checking 1599.21
savings 2221.99
...
我将如何编写这样一个查询
编辑:这里有一个解决方案,它非常接近我想要的,它只是有一个额外的id列。您可以将CURDATE替换为任意日期,以获取该日期对应的余额表
SELECT id, acct_name, opening_bal+amt-amt2 as balance FROM accounts
INNER JOIN
(SELECT to_acct, sum(amount) AS amt
FROM transactions
WHERE date <= CURDATE()
GROUP BY to_acct) as T2
ON accounts.id=T2.to_acct
INNER JOIN
(SELECT from_acct, sum(amount) AS amt2
FROM transactions
WHERE date <= CURDATE()
GROUP BY from_acct) as T3
ON T2.to_acct = T3.from_acct
;
像这样的。若你们提供更多的数据,答案可能会更准确。表1是您的第一张表,表2是第二张表
select acct_name as acct,
opening_bal - t1.put_money + t2.get_money as balance
from Table1
left join (select from_acct, ifnull(sum(amount),0) as put_money from Table2 group by from_acct) t1
on t1.from_acct = Table1.id
left join (select to_acct, ifnull(sum(amount),0) as get_money from Table2 group by to_acct) t2
on t2.to_acct = Table1.id;
你的问题很清楚,但请补充你已经尝试过的问题,以及它们以何种方式不起作用;这有助于其他人了解他们应该为自己的答案提供多少解释,并有助于其他人将答案集中在您没有尝试过的事情上,和/或建议调整您已经做的事情将accounts表与from_acct中id上的transactions表连接起来,到账户。将期初余额添加到转入金额和转出金额的负数之和。
select acct_name as acct,
opening_bal - t1.put_money + t2.get_money as balance
from Table1
left join (select from_acct, ifnull(sum(amount),0) as put_money from Table2 group by from_acct) t1
on t1.from_acct = Table1.id
left join (select to_acct, ifnull(sum(amount),0) as get_money from Table2 group by to_acct) t2
on t2.to_acct = Table1.id;