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

如何利用Age表引用范围在CASE表达式中统计逾期贷款?

问题分析与修正方案

原查询存在几个核心问题:

  • 用逗号连接三张表时未指定Age表与其他表的关联条件,导致产生大量无效的笛卡尔积数据
  • 子查询的GROUP BY Age不符合SQL语法规则,SELECT中的LoanID和AgeBand既未被聚合,也未包含在GROUP BY列表中
  • 错误的分组逻辑导致仅能返回部分年龄段的数据

修正后的SQL语句

SELECT 
    a.AgeID AS AgeBand,
    COUNT(l.LoanID) AS "Number of loans"
FROM 
    Age a
LEFT JOIN (
    -- 先筛选逾期贷款并关联客户信息,拿到客户年龄
    SELECT 
        l.LoanID,
        c.Age
    FROM 
        Loan l
    INNER JOIN 
        Client c ON l.CustomerID = c.CustomerID
    WHERE 
        l.PastDue_Days >= 1
) AS overdue_loans ON overdue_loans.Age > a.Low_Value AND overdue_loans.Age <= a.High_Value
GROUP BY 
    a.AgeID
ORDER BY 
    a.Low_Value;

逻辑说明

  1. 子查询部分:先从Loan表筛选出逾期(PastDue_Days >=1)的记录,通过CustomerID关联Client表,拿到每个逾期贷款对应的客户年龄,确保只处理有效逾期数据。
  2. 主查询关联Age表:用LEFT JOIN关联Age表,通过年龄区间条件匹配对应的年龄段,使用LEFT JOIN可保证即使某个年龄段没有逾期贷款,也会显示该年龄段并统计数量为0。
  3. 分组统计:按AgeID(即AgeBand)分组,统计每个年龄段的逾期贷款数量,最后按Low_Value排序,保证结果按年龄段顺序展示。

如果只需要显示有逾期贷款的年龄段,可把LEFT JOIN换成INNER JOIN。

内容的提问来源于stack exchange,提问作者Fliwolf Gaming

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:21:12