Sum, Subtract and Join of multiple mysql table columns(多个mysql表列的求和、减法和连接)
问题描述
我有四个 mysql 表 client、transaction、other_loan 和 payment.我想从表 transaction + sum 中获取 load_amount 和 additional 的 sumamount 从 other_loan 和 subtract 到 payment_amount 的 sum 在表 <代码>付款代码>.我怎样才能实现它?
我想要的结果:
<代码>>身份证 |姓名 |数量>1 |罗宾 |8718>2 |雷纳尔多 |21>3 |利奥马尔 |0
<块引用>
我的桌子:交易
<代码>>时间 |编号|日期 |负载量 |额外的>1 |1 |2018-12-01 |90 |0>2 |1 |2018-12-07 |90 |0>3 |2 |2018-12-08 |49 |2
<块引用>
表:other_loan
<代码>>类 |编号|金额 |日期>1 |1 |7928 |2018-12-10>2 |1 |750 |2018-12-10
<块引用>
表格:付款
<代码>>pid |id |付款金额 |日期>1 |1 |50 |2015-12-10>2 |1 |90 |2015-12-10>3 |2 |30 |2015-12-10
<块引用>
表:客户端
<代码>>编号 |姓名 |>1 |罗宾 |>2 |灰姑娘 |>3 |利奥马尔 |
因为您有多个交易,每个客户的其他贷款金额和付款,您不能直接 JOIN 表因为这会导致行的复制,从而导致不正确的值.相反,我们在执行 JOIN 之前 以客户端为基础SUM 每个表中的所有值.此外,由于某些客户端在每个表中都没有条目,因此您必须在结果上使用 LEFT JOINs 和 COALESCE 以便空行不会导致 SUM 变为NULL.此查询应为您提供所需的结果:
选择 c.id, c.name,COALESCE(t.transactions, 0) + COALESCE(o.amounts, 0) - COALESCE(p.payments, 0) AS 金额来自客户 cLEFT JOIN (SELECT id, SUM(load_amount) + SUM(additional) AS 交易从交易GROUP BY id) t on t.id = c.idLEFT JOIN (SELECT id, SUM(amount) AS amountFROM other_loanGROUP BY id) o ON o.id = c.idLEFT JOIN (SELECT id, SUM(payment_amount) AS 付款从付款GROUP BY id) p ON p.id = c.id按 c.id 分组输出(用于您的样本数据):
id 名称 数量1 罗宾 87182灰姑娘213 利奥马尔 0SQLFiddle 演示
I have four mysql tables client, transaction, other_loan and payment. I want to get the sum of load_amount and additional from table transaction + sum of amount from other_loan and subtract it to the sum of payment_amount in table payment. How can I achieve it?
Result I want:
> ID | Name | Amount
> 1 | Robin | 8718
> 2 | Reynaldo | 21
> 3 | Leomar | 0
My Tables: transaction
> 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
table: other_loan
> oid | id| amount | date
> 1 | 1 | 7928 | 2018-12-10
> 2 | 1 | 750 | 2018-12-10
table: payment
> pid |id | payment_amount | date
> 1 | 1 | 50 | 2015-12-10
> 2 | 1 | 90 | 2015-12-10
> 3 | 2 | 30 | 2015-12-10
table: client
> id | Name |
> 1 | Robin |
> 2 | Cinderella |
> 3 | Leomar |
Because you have multiple transactions, other loan amounts and payments per customer, you can't do a straight JOIN of the tables to each other as it will cause replication of rows, resulting in incorrect values. Instead, we SUM all the values within each table on a client basis before doing the JOIN. Additionally, since some clients don't have entries in each table, you must use LEFT JOINs and COALESCE on the results so that empty rows don't cause SUMs to become NULL. This query should give you the results you want:
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
Output (for your sample data):
id name amount
1 Robin 8718
2 Cinderella 21
3 Leomar 0
Demo on SQLFiddle
这篇关于多个mysql表列的求和、减法和连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:多个mysql表列的求和、减法和连接
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- SQL 临时表问题 2022-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
