我正在为彼此共享账单的人创建一个小型自动结算器网络应用程序。
举个简单的例子,如果 Sam、Bill 和 Jim 住在一起并分担电费、煤气费和宽带费等共同账单,他们应该能够将每笔交易输入到 Web 应用程序,然后应用程序会自动计算谁应该支付对谁。
有两个表与这个问题有关:“transactions”和“transactionusers”。
交易: ID、用户 ID、零售商、项目、日期
Transactionusers: ID、TransactionID、Amount、UserID
当 Sam 添加电费账单(90 美元)的“交易”记录并将金额平均分配给室友时,3 条记录将添加到“交易用户”表中。
我希望能够编写一个 SQL 查询来计算所有用户之间所有交易的总和,然后取消反向交易(例如,如果 Sam 欠 Bill 50 美元,Bill 欠 Sam 20 美元,那么结算是 Bill 欠 Sam 30 美元)
我当前的查询允许您总结每对用户之间的总交易价值,但不带走反向交易 - 非常感谢任何帮助:
SELECT transactionusers.userID AS debtor, SUM(amount) AS owes, transactions.userID AS toUser FROM transactionusers
INNER JOIN transactions ON transactions.ID = transactionusers.transactionID
WHERE transactions.userID <> transactionusers.userID
GROUP BY transactionusers.userID, transactions.userID
示例数据
假设 UserID 是 Sam (1)、Bill (2)、Jim (3)
交易:
1, 1, 'Electricity Co', 'Electricity Bill'
2, 2, 'Gas Co', 'Gas Bill'
3, 3, 'Broadband Co', 'Broadband Charge'
交易用户:
1, 1, 30, 1
2, 1, 30, 2
3, 1, 30, 3
4, 2, 20, 1
5, 2, 20, 2
6, 2, 20, 3
7, 3, 5, 1
8, 3, 5, 2
9, 3, 5, 3
示例记录中未显示的是在用户之间不均等地分配账单的能力;例如:如果吉姆在这所房子里多住一个月,他可能会拿到更多的账单