MySQL查询根据部分付款计算欠款

时间:2018-04-14 22:00:18

标签: mysql sql select

我可以通过PHP代码执行以下操作,但我觉得它很可能是在MySQL中完成的,所以只是找人帮我查询。

我有一份合约表,定义了客户的每月付款,比方说,例如每月500英镑。然后,我有另一张名为租的表,每月租金都输入。每个租金都有一个名为付费,未付和部分的状态。

到目前为止,我的查询是以下内容,我是否必须执行多个子查询,或者这是一个简单的方法。

SELECT cc.property_id, cc.property_rent, r.order_total, r.order_status,  
       SUM(CASE WHEN r.order_status = 'Partial' THEN cc.property_rent - r.order_total ELSE 0 END) AS partial_rent_owed
FROM t_customers_contract cc JOIN
     t_customers_rent r
     ON cc.customer_id = r.customer_id                                                   WHERE cc.property_id = 62 AND r.transaction_type = 'rent' AND
      (r.date_created BETWEEN '2017-04-05' AND '2019-04-05')
GROUP BY cc.property_id

基本上,如果租金状态是部分的,那么从通常的金额中减去它,然后减去欠款的总和。

期望的结果将是所欠的总和的SUM以及每个属性的贡献作为以下输出:

property_id,total_rent_made,total_rent_owed

当前的合约表结构和数据如下:

Contract table

目前的租赁表结构和数据如下:

enter image description here

正如您所看到的,order_id 20和27是部分付款,根据这些ID的合同进行的实际付款应为750和700.

1 个答案:

答案 0 :(得分:0)

我已设法解决它,它是以下查询。如果有人可以改进它,很高兴根据表现采取建议或更清洁。

SELECT cc.property_id, 
SUM(CASE WHEN r.order_status = 'Partial' THEN (cc.property_rent - r.order_total) ELSE 0 END) AS partial_rent_owed
FROM t_customers_contract cc JOIN t_customers_rent r ON (cc.property_id = r.property_id)
WHERE cc.contract_id = r.contract_id
AND cc.customer_id = 7866
AND r.transaction_type = 'rent'
AND (r.date_created BETWEEN '2016-04-05' AND '2019-04-05')
GROUP BY cc.property_id