MySQL数据库需要的总和

时间:2018-03-07 13:39:23

标签: mysql database join relational-database outer-join

我希望你能帮我解决以下问题:
我有以下两个表:

tableA

table

tableA.currencyA将始终=表格B中相关项目中的currencyB 我需要返回以下结果:

enter image description here

基本上在结果​​中我需要返回tableA中的所有项目以及tableB中条目的摘要。我一直在尝试几个查询,但看起来我不能用这句话出来。我尝试的那些没有返回item4的数据(请注意,item4在tableB中没有条目)。

2 个答案:

答案 0 :(得分:1)

对你需要的东西采取一点干净的方法

SELECT z.*,
(z.totalA - z.in) AS difference
FROM (
    SELECT a.idA, a.currencyA, a.totalA,
    IF(b.idB IS NOT NULL, SUM(b.amountA), 0) AS `in`
    FROM tableA a
    LEFT JOIN tableB b ON a.idA = b.idA
    GROUP BY a.idA
) z;
  

输出

idA currencyA   totalA  in  difference
1      usd       1000   550   450
2      usd       2000   700   1300
3      eur       3000   600   2400
4      usd       4000    0    4000

Working Demo

答案 1 :(得分:0)

我相信这样的事情会有效:

select 
    tableA.idA, 
    tableA.currencyA as currency, 
    tableA.totalA as total, 
    case when (sum(tableB.amountB) is null) then 0 else sum(tableB.amountB) end as 'in',
    case when (sum(tableB.amountB) is null) then tableA.totalA else 
    tableA.totalA-sum(tableB.amountB) end as 'difference'
from 
    tableA left outer join tableB on tableA.idA=tableB.idA
group by tableA.idA;