【发布时间】:2015-04-18 16:48:28
【问题描述】:
我有以下两个表:
table: loan
--------------------------------------------------------
id | advance_id | loan_amount | deposit_amount | date
--------------------------------------------------------
1 | 22556678 | 5000 | 0 | 2015-02-06
--------------------------------------------------------
table: advance
--------------------------------------------------------
id | advance_id | advance_amount | purpose | date
--------------------------------------------------------
1 | 22556678 | 20000 | purchase | 2015-01-30
2 | 22556678 | 10000 | purchase | 2015-01-31
--------------------------------------------------------
我的代码是:
SELECT a.advance_id, sum(a.advance_amount) as adv_amount, a.purpose, a.date, sum(l.loan_amount) as loan_amount FROM advance as a INNER JOIN loan as l ON a.advance_id=l.advance_id GROUP BY a.advance_id HAVING sum(l.loan_amount)-sum(l.deposit_amount)>0
说明: 表'advance'是用于预付的表,表'loan'是用于贷款账户的表。为同一目的预付可以不止一次(这里是为了购买产品)。每个预付款都由一个预付款 ID 标识。由于两个预付款用于同一目的(此处用于购买产品),它们将具有相同的 Advance_id。另一方面,贷款是针对任何预付款进行的。也可以针对同一预付款多次贷款。如果任何贷款将被偿还,它将被插入到advance_id的deposit_amount列中。
在loan_page.php 中,只有在任何贷款未支付/未调整时才会显示贷款。为了识别它,我必须通过以下代码针对相同的预付款 ID 计算贷款和存款列:
GROUP BY a.advance_id HAVING sum(l.loan_amount)-sum(l.deposit_amount)>0
如果有任何贷款未偿还,我必须确定每个Advance_id 获得了多少贷款。所以我还必须选择以下内容:
sum(l.loan_amount)
我获取的输出将是:
echo 'Total loan Amount: '.$row['loan_amount'].'<br />';
echo 'Advance ID: '.$row['advance_id'].'<br />';
echo 'Advance Amount: '.$row['adv_amount'].'<br />';
echo 'Purpose of Advance: '.$row['purpose'];
上面的代码运行良好,除了总贷款金额是双倍(在这种情况下为 10000)虽然它将是 5000。我认为我的 mysql 查询的 GROUP BY 或 HAVING 子句有错误。
请告诉我,如何更正代码以使 sum(l.loan_amount) 在这种情况下为 5000,而不是 10000。
【问题讨论】:
标签: mysql group-by inner-join having