我想创建一个查询来计算到期金额,对于可以针对特定paymentSchedule id进行部分付款的情况
我有一张包含付款时间表的表格,如下所示:
CREATE TABLE IF NOT EXISTS paymentSchedule (
id int(11) NOT NULL AUTO_INCREMENT,
concept varchar(32) COLLATE utf8_spanish_ci NOT NULL,
student_id int(11) NOT NULL,
dueDate date NOT NULL,
amount decimal(10,2) NOT NULL,
PRIMARY KEY (id)
)
我有一个这样的支付交易表,wherepaymentSchedule_id参考上表:
CREATE TABLE IF NOT EXISTS ledger (
id int(11) NOT NULL AUTO_INCREMENT,
paymentDate date NOT NULL,
amount decimal(10,2) NOT NULL,
paymentSchedule_id int(11) NOT NULL,
PRIMARY KEY (id)
)
我试着去像这里的减法: How to substract from the resut of two selects in mysql
但只有在分类帐中存在具有对应的paymentSchedule id的字段时才有效。 什么是正确的方法?
另一方面,是存储付款时间表和交易的正确方法吗?
答案 0 :(得分:1)
好像你正试图这样做?
for each id in paymentSchedule table:
store paymentSchedule.amount - sum( ledger.amount )
在这种情况下你可以这样做:
SELECT paymentSchedule.id,
paymentSchedule.amount - IFNULL(SUM(ledger.amount),0) AS remaining
FROM paymentSchedule
LEFT JOIN ledger ON paymentSchedule.id=ledger.paymentSchedule_id
GROUP BY ledger.paymentSchedule_id
这显示了剩余的所有金额,无论一个人是否支付了任何金额(感谢IFNULL( xxx, 0 )
)。