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表列的求和、减法和连接
基础教程推荐
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 无法解决整理冲突 2021-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- 是否可以执行按位分组功能? 2021-01-01
