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

SQL统计问题:逾期贷款笔数COUNT统计失效、逾期率计算问题排查

问题原因

当前SQL统计逾期笔数错误的核心原因是COUNT()函数的计数逻辑为统计所有非NULL值:你写的CASE表达式无论days_delay > 30是否成立,都会返回1或0,二者均为非NULL值,最终COUNT统计的结果等于表内总行数,和总贷款笔数结果一致。

修正方案

有两种常用的正确写法可以实现逾期30天以上贷款笔数的统计:

  • 调整CASE表达式的返回值,不满足条件时返回NULL(可直接省略ELSE分支,SQL默认不满足CASE条件时返回NULL),此时COUNT只会统计满足条件的行
  • 使用SUM()函数替代COUNT(),满足条件时累加1,不满足条件时累加0,最终求和结果就是符合要求的逾期笔数

另外需要注意:多数数据库的整数除法规则会自动舍弃小数位,计算逾期率时建议先将分子转为浮点型,避免比例计算结果为0的错误。

完整修正后代码
WITH cTE AS
(
    SELECT
        -- 写法1:用COUNT,省略ELSE分支,不满足条件返回NULL
        COUNT(CASE WHEN days_delay > 30 THEN 1 END) AS number,
        -- 写法2:用SUM,保留ELSE 0分支,两种写法二选一即可
        -- SUM(CASE WHEN days_delay > 30 THEN 1 ELSE 0 END) AS number,
        COUNT(loan_id) AS total_loans
    FROM
        loan_aggregate
)
SELECT  
    number, 
    total_loans, 
    -- 乘以1.0转为浮点型,避免整数除法错误
    (number * 1.0 / total_loans) AS default_rt 
FROM
    cTE

内容的提问来源于stack exchange,提问作者Youssef Fahmy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:39:03