You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Inactive状态合同8-10月总还款金额SQL查询需求

问题描述

现有contract和ledger两张表(结构如下),需要编写SQL查询,计算**合同状态不为"Inactive"**的每个contract_id在8、9、10月的总还款金额——总还款金额为该时间段内loan_amount的总和加上对应合同的interest。

contract表

contract_idtotal_loaninterestcontract_status
11115050Active
12240025Finished
1337500Inactive
14455050Active

ledger表

ledger_idcontract_iddue_dateloan_amount
1jk1112021-07-0125
2pl1112021-08-1475
1bd1112021-08-2550
7mn1222021-07-20100
6gf1222021-08-11150
9kt1222021-09-1675
5sz1222021-10-0575
3am1332021-10-18750
8hw1442021-09-22550

预期输出:

contract_idtotal_repayment
111175
122325
144600

解决方案

以下SQL语句可实现需求:

SELECT 
    c.contract_id,
    SUM(l.loan_amount) + c.interest AS total_repayment
FROM 
    contract c
INNER JOIN 
    ledger l ON c.contract_id = l.contract_id
WHERE 
    c.contract_status != 'Inactive'
    AND MONTH(l.due_date) BETWEEN 8 AND 10
GROUP BY 
    c.contract_id, c.interest;

关键说明

  1. 表关联:用INNER JOIN关联两张表,只保留有对应还款记录的非Inactive合同,匹配预期输出范围
  2. 日期筛选:MONTH(l.due_date) BETWEEN 8 AND 10快速锁定8-10月的还款记录,也可替换为IN (8,9,10),效果一致
  3. 聚合计算:
    • SUM(l.loan_amount)统计目标月份的本金总和
    • 加上合同固定的interest得到总还款金额
    • 分组时必须包含c.interest,避免SQL语法报错(如MySQL开启ONLY_FULL_GROUP_BY时)

结果验证

  • 合同111:8月还款75+50=125,加利息50 → 175
  • 合同122:8月150+9月75+10月75=300,加利息25 → 325
  • 合同144:9月还款550,加利息50 → 600
    完全匹配预期输出。

内容的提问来源于stack exchange,提问作者Enzo Austin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:55:17