mysql - 如何将 group by 与 inner join 一起使用

标签 mysql join group-by

我有三个表customerbargainsinstallment
我想从 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/

相关文章:

c# - 这是最流畅的 nhibernate 抓取策略吗?

mysql - 按 count(*) 和 0 而不是空分组

mysql - 1146 "app_name.django_site missing"

php - 查找多个插入查询的 auto_increment 值

java - 使用 Spring Boot 测试 OneToMany 与 Postman 的关系时出错

mysql - 将列复制到另一个表

mysql - 从两个单独的表中选择相关项目的最佳方法

java - MySQL JDBC 返回 0 个结果

python - Pandas :在一组中使用多个功能

MySql 条件分组依据