【问题标题】:Sum, Subtract and Join of multiple mysql table columns多个mysql表列的求和、减法和连接
【发布时间】:2019-05-12 02:47:27
【问题描述】:

我有四个mysql表clienttransactionother_loanpayment。我想从other_loanother_loansubtracttransaction + sumload_amountadditional 的表中获取sumsubtract 它到@9876543334 的sum 987654335@。我怎样才能实现它?

我想要的结果:

>  ID | Name     |  Amount
>  1  | Robin    | 8718  
>  2  | Reynaldo | 21
>  3  | Leomar   | 0

我的桌子: 交易

>  tid | id| date       | load_amount | additional
>  1   | 1 | 2018-12-01 |    90       | 0  
>  2   | 1 | 2018-12-07 |    90       | 0
>  3   | 2 | 2018-12-08 |    49       | 2

表:other_loan

> oid | id| amount   |  date
> 1   | 1 | 7928     | 2018-12-10
> 2   | 1 | 750      | 2018-12-10

表格:付款

> pid |id | payment_amount  | date
> 1   | 1 |      50         | 2015-12-10
> 2   | 1 |      90         | 2015-12-10
> 3   | 2 |      30         | 2015-12-10

表:客户端

> id | Name       |  
> 1  | Robin      | 
> 2  | Cinderella |
> 3  | Leomar     | 

【问题讨论】:

  • transactionother_loanpayment 中的id 值是否都引用了client 中的id 值?
  • 是的,先生。那是正确的。我无法得到正确的结果。

标签: mysql join sum subtraction


【解决方案1】:

由于您有多个交易、其他贷款金额和每位客户的付款,因此您不能将表直接JOIN 相互关联,因为这会导致行复制,从而导致值不正确。相反,我们在执行JOIN 之前 以客户端为基础SUM 每个表中的所有值。此外,由于某些客户端在每个表中都没有条目,因此您必须在结果上使用LEFT JOINs 和COALESCE,以便空行不会导致 SUM 变为 NULL。此查询应为您提供所需的结果:

SELECT c.id, c.name,
       COALESCE(t.transactions, 0) + COALESCE(o.amounts, 0) - COALESCE(p.payments, 0) AS amount
FROM client c
LEFT JOIN (SELECT id, SUM(load_amount) + SUM(additional) AS transactions
           FROM transaction
           GROUP BY id) t on t.id = c.id
LEFT JOIN (SELECT id, SUM(amount) AS amounts
           FROM other_loan
           GROUP BY id) o ON o.id = c.id
LEFT JOIN (SELECT id, SUM(payment_amount) AS payments
           FROM payment
           GROUP BY id) p ON p.id = c.id
GROUP BY c.id

输出(用于您的样本数据):

id  name        amount
1   Robin       8718
2   Cinderella  21
3   Leomar      0

Demo on SQLFiddle

【讨论】:

  • 非常感谢@Nick,它有效。感谢您的时间和精力。
  • @RobinSalvador 不用担心。很高兴我能帮上忙。
猜你喜欢
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2013-08-18
  • 2010-10-21
  • 2014-12-20
相关资源
最近更新 更多