SELECT 
    pay_ability,
    CONCAT(ROUND(SUM(is_overdue)*100.0/COUNT(*), 1), '%') AS overdue_ratio
FROM (
    SELECT 
        c.pay_ability,
        MAX(CASE WHEN l.overdue_days > 0 THEN 1 ELSE 0 END) AS is_overdue
    FROM customer_tb c
    JOIN loan_tb l ON c.customer_id = l.customer_id
    GROUP BY c.customer_id
) t
GROUP BY pay_ability
ORDER BY overdue_ratio DESC;

大部分题解考虑的都是 合同占比,而不是 客户占比 。

如果一个客户不止一个合同,答案就会出错。