我有三个表customer,bargains和installment。
我想从 customer 表中选择 name 并从 bargains 表中选择 total price 的总和以及 的总和根据每个客户从分期付款表中支付金额,最后从支付金额中减去总价之和。
所以结果应该是一个包含所有客户名称及其债务的列表。
我尝试了以下命令,但它返回了错误的值,看起来它们被相加了两次或更多次。
select c.name, b.total_price, i.payment_amount
from customer as c
inner join (select sell_or_buy, sum(total_price) as total_price from bargains group by C_ID ) as b on (b.sell_or_buy = 'خرید')
inner join (select trade_type, sum(payment_amount) as payment_amount from installment group by C_ID ) as i on (i.trade_type = 'پرداخت')
group by c.C_ID
因为我认为查询对分期付款表的每条记录的总价求和以及对便宜货表的每条记录的支付金额求和我尝试在内部联接中使用 select 以使它们中的每一个都不同但它不起作用
所以我什至不能减去结果。
我也尝试以下查询
select
(select sum(payment_amount) as payment_amount from installment where trade_type = 'پرداخت'group by C_ID)-
(select sum(total_price) as total_price from bargains where sell_or_buy = 'خرید' group by C_ID)as result
哪个显示和错误说查询返回多行。
当我只使用上述查询中的一个选择时,结果还可以,但是当我尝试组合时,它不起作用。
最佳答案
您的原始查询似乎缺少正确的连接条件。试试这个:
select c.name,
b.total_price,
i.payment_amount
from customer as c
inner join
(
select C_ID, sum(total_price) as total_price
from bargains
where sell_or_buy = 'خرید'
group by C_ID
) as b
on c.C_ID = b.C_ID
inner join
(
select C_ID, sum(payment_amount) as payment_amount
from installment
where trade_type = 'پرداخت'
group by C_ID
) as i
on c.C_ID = i.C_ID
如果您想计算总价和付款金额之间的差额,只需使用此SELECT
:
select c.name,
b.total_price,
i.payment_amount,
b.total_price - i.payment_amount AS diff
关于mysql - 如何将 group by 与 inner join 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41479478/