Mysql 查询如何对联接表求和?

Mysql 查询如何对联接表求和?,mysql,join,sum,Mysql,Join,Sum,我不知道标题应该是什么。思考题目比写这个问题要花更多的时间。 切中要害 假设我有三张桌子: //table customers | ID | Name | ++++++++++++++++++++++++++++++++ | 194 | PT Comro Haneut | | 195 | PT Kareueut Kameumeut | //table customer's savings | ID | IDCustomer | Sa

我不知道标题应该是什么。思考题目比写这个问题要花更多的时间。
切中要害
假设我有三张桌子:

//table customers 
|  ID  | Name                  |
++++++++++++++++++++++++++++++++
| 194  | PT Comro Haneut       |
| 195  | PT Kareueut Kameumeut |

//table customer's savings 
|  ID  | IDCustomer | SavingsAmount |
+++++++++++++++++++++++++++++++++++++
|   1  |    194     |    5000000    |
|   2  |    195     |     250000    |
|   3  |    195     |    2500000    |
|   4  |    194     |     125000    |
|   5  |    194     |     175000    |

//table transactions
|  ID  | IDCustomer | Amount        |
+++++++++++++++++++++++++++++++++++++
|  1   |    195     |    1000000    |
|  2   |    195     |     250000    |
|  3   |    194     |    3500000    |
|  4   |    194     |     300000    |
目标
我想将储蓄金额和交易金额相加,并将结果放在一行中,如下所示:

// expected result of the query
| IDCustomer | Savings      | Transactions  | Balance       |
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|   194      |    5300000   |   4800000     |    500000     |
|   195      |    2750000   |   1250000     |   1500000     |
我试图自己构建查询,但总是失败。我得到了存款总额,交易额翻了一番。


有人能帮忙吗?

看来您不需要客户表中的任何特定数据,所以只需优化结果即可使用

SELECT savings.IDCustomer, sum(SavingsAmount) as savings,sum(Amount) as amount, sum(SavingsAmount)-sum(Amount) as Balance
FROM savings
LEFT JOIN transactions
ON savings.IDCustomer=transactions.IDCustomer
group by savings.IDCustomer
ORDER BY savings.IDCustomer;
查询

select svg.id, Savings, Transactions, (Savings - Transactions) as Balance
from
(
  select c.id as id, sum(s.SavingsAmount) as Savings
  from customers c
  inner join savings s
  on c.id=s.idcustomer
  group by c.id
) svg
inner join
(
  select c.id as id, sum(t.amount) as Transactions
  from customers c
  inner join transactions t
  on c.id=t.idcustomer
  group by c.id
) trans
on svg.id = trans.id
;
设置

create table customers
(
  id integer primary key not null,
  name varchar(23) not null
);

create table savings
(
  id integer primary key not null,
  IDCustomer integer not null,
  SavingsAmount decimal(10, 2) not null,
  foreign key ( IDCustomer ) references customers ( id )
);

create table transactions
(
  id integer primary key not null,
  IDCustomer integer not null,
  amount decimal(10, 2) not null,
  foreign key ( IDCustomer ) references customers ( id )
);

insert into customers
( id, name )
values
( 194  , 'PT Comro Haneut'       ),
( 195  , 'PT Kareueut Kameumeut' )
;

insert into savings 
(  id  , IDCustomer , SavingsAmount )
values
(   1  ,    194     ,    5000000    ),
(   2  ,    195     ,     250000    ),
(   3  ,    195     ,    2500000    ),
(   4  ,    194     ,     125000    ),
(   5  ,    194     ,     175000    )
;

insert into transactions
(  id  , IDCustomer , amount        )
values
(  1   ,    195     ,    1000000    ),
(  2   ,    195     ,     250000    ),
(  3   ,    194     ,    3500000    ),
(  4   ,    194     ,     300000    )
;

输出

+-----+------------+--------------+------------+
| id  | Savings    | Transactions | Balance    |
+-----+------------+--------------+------------+
| 194 | 5300000.00 |   3800000.00 | 1500000.00 |
| 195 | 2750000.00 |   1250000.00 | 1500000.00 |
+-----+------------+--------------+------------+

是的,如果我想显示客户名称,我只需要客户表。但此查询与另一个答案产生相同的结果。同意,结果相同。但在某些地方,通过避免查询中不需要的表连接,查询执行时间有所提高。就是这样!子查询的答案是:D