MySQL 根据另一个 table 信息拆分 table 金额
MySQL split table amounts based on another table information
我需要根据另一个相关的 table 信息 (bill_details) 拆分 table(交易)中的金额。
基础table(交易):
ID
amount
document_id
1
100.00
11
2
80.00
12
3
120.00
13
另一个table (bill_details):
ID
amount
document_id
description
1
20.00
11
A
2
60.00
11
B
3
20.00
11
C
4
80.00
12
D
5
60.00
13
E
6
20.00
13
F
5
20.00
13
G
6
40.00
13
H
我需要的:
amount (splited from transactions)
description (from row in description)
20.00
A
60.00
B
20.00
C
80.00
D
60.00
E
20.00
F
20.00
G
20.00
H
注意事项:有时'bill_details'金额之和不等于'transactions'金额。
一张账单可以有0+笔交易。
我应该在 MySQL 中继续尝试还是应该使用 PHP?
有点复杂,但在 MySQL 8.0 中,您可以使用 window 函数的下一种方式:
SELECT
description,
bill_details.amount + least(
transactions.amount -
SUM(bill_details.amount) OVER (PARTITION BY document_id ORDER BY bill_details.ID),
0
) amount
FROM bill_details
JOIN transactions USING(document_id)
ORDER BY bill_details.ID
我需要根据另一个相关的 table 信息 (bill_details) 拆分 table(交易)中的金额。
基础table(交易):
ID | amount | document_id |
---|---|---|
1 | 100.00 | 11 |
2 | 80.00 | 12 |
3 | 120.00 | 13 |
另一个table (bill_details):
ID | amount | document_id | description |
---|---|---|---|
1 | 20.00 | 11 | A |
2 | 60.00 | 11 | B |
3 | 20.00 | 11 | C |
4 | 80.00 | 12 | D |
5 | 60.00 | 13 | E |
6 | 20.00 | 13 | F |
5 | 20.00 | 13 | G |
6 | 40.00 | 13 | H |
我需要的:
amount (splited from transactions) | description (from row in description) |
---|---|
20.00 | A |
60.00 | B |
20.00 | C |
80.00 | D |
60.00 | E |
20.00 | F |
20.00 | G |
20.00 | H |
注意事项:有时'bill_details'金额之和不等于'transactions'金额。 一张账单可以有0+笔交易。
我应该在 MySQL 中继续尝试还是应该使用 PHP?
有点复杂,但在 MySQL 8.0 中,您可以使用 window 函数的下一种方式:
SELECT
description,
bill_details.amount + least(
transactions.amount -
SUM(bill_details.amount) OVER (PARTITION BY document_id ORDER BY bill_details.ID),
0
) amount
FROM bill_details
JOIN transactions USING(document_id)
ORDER BY bill_details.ID