mysql查询根据部分付款计算所欠租金

v8wbuo2f  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(290)

我可能可以通过php代码完成以下操作,但我觉得这很可能是在mysql中完成的,所以我只是想找个人帮我查询一下。
我有一个合同表,它定义了一个客户每月的付款,比方说它是£每月500英镑。然后我有另一个名为rent的表,在这里输入每个月的租金。每个租金都有一个状态,称为已付、未付和部分。
到目前为止,我的查询如下,是我必须做多个子查询,还是他们的一个简单的方法。

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

基本上,如果租金是部分的,那么从通常的租金中减去,然后减去所欠的总额。
预期结果将是每个财产的欠款和已供款的总额,作为以下产出:
物业编号、总租金、总欠租
当前合同表结构和数据如下:

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

如您所见,订单号20和27是部分付款,根据合同,这些id的实际付款应为750和700。

5lhxktic

5lhxktic1#

我已经设法解决它,它是下面的查询。如果有人能改进它,乐意接受基于性能或更干净的建议。

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

相关问题