带COUNT与SUM的表连接:求loanform与schedule_loanform关联的MySQL查询语句
没问题,我来帮你搞定这两张表的关联查询,包含COUNT计数和SUM求和操作~首先得先明确两张表之间的关联逻辑,通常这类场景下,loanform是存储贷款基本信息的主表,schedule_loanform是存储每笔贷款对应还款计划的子表,它们大概率会有一个共同的关联字段(比如loan_id,主表的主键,子表的外键)。下面我会给你几种常见场景的查询示例,你可以根据实际表结构调整:
1. 统计每笔贷款的还款计划条数及总还款金额
如果需要保留所有贷款记录(哪怕没有对应的还款计划),用LEFT JOIN;如果只统计有还款计划的贷款,用INNER JOIN。
LEFT JOIN 示例(包含无还款计划的贷款)
SELECT l.loan_id, l.loan_amount, l.customer_name, COUNT(s.schedule_id) AS total_schedule_count, -- 统计该贷款的还款计划总条数 COALESCE(SUM(s.repayment_amount), 0) AS total_repayment_amount -- 统计总还款金额,COALESCE把NULL转为0 FROM loanform l LEFT JOIN schedule_loanform s ON l.loan_id = s.loan_id -- 替换为你实际的关联字段 GROUP BY l.loan_id, l.loan_amount, l.customer_name; -- 按主表的唯一标识字段分组
INNER JOIN 示例(仅统计有还款计划的贷款)
SELECT l.loan_id, l.customer_name, COUNT(s.id) AS schedule_count, SUM(s.principal + s.interest) AS total_payable -- 如果还款金额分本金和利息,可合并求和 FROM loanform l INNER JOIN schedule_loanform s ON l.loan_id = s.loan_id GROUP BY l.loan_id, l.customer_name;
2. 全局统计所有贷款的汇总数据
如果需要统计所有贷款的总笔数、总还款计划数、总还款金额这类全局指标:
SELECT COUNT(DISTINCT l.loan_id) AS total_loan_count, -- 总贷款笔数,DISTINCT避免重复统计 COUNT(s.schedule_id) AS total_all_schedules, -- 所有还款计划的总条数 SUM(s.repayment_amount) AS total_all_repayment -- 所有还款的总金额 FROM loanform l LEFT JOIN schedule_loanform s ON l.loan_id = s.loan_id;
3. 带筛选条件的统计(比如逾期还款计划)
如果要针对特定条件统计(比如逾期未还的还款计划):
SELECT l.loan_id, l.customer_name, COUNT(s.schedule_id) AS overdue_schedule_count, SUM(s.repayment_amount) AS overdue_total_amount FROM loanform l LEFT JOIN schedule_loanform s ON l.loan_id = s.loan_id WHERE s.due_date < CURDATE() -- 假设due_date是还款到期日,筛选已过期的 AND s.is_paid = 0 -- 假设is_paid是还款状态,0代表未还款 GROUP BY l.loan_id, l.customer_name HAVING overdue_schedule_count > 0; -- 只显示有逾期记录的贷款
注意事项
- 请把示例中的
loan_id、repayment_amount、due_date等字段替换成你实际表中的字段名 - 如果关联字段不是
loan_id,一定要改成两张表实际的关联键 COALESCE函数用来处理SUM返回NULL的情况(比如某笔贷款没有还款计划时,SUM会返回NULL,用这个函数可以转为0,更符合统计逻辑)
内容的提问来源于stack exchange,提问作者user3037803
相关产品推荐
相关产品推荐

