这道题目要求我们分析不同还款能力级别的客户逾期情况,计算每个还款能力级别的客户中有逾期行为的客户占比,并按占比降序排序。下面是这个SQL查询的思路和实现步骤。

1. 确定总体问题

我们需要计算每个还款能力级别的客户中有逾期行为的客户占比。逾期行为的定义是overdue_days字段不为NULL。

2. 分析关键问题

  • 获取客户的还款能力:我们需要将loan_tbcustomer_tb表连接起来,以便获取每个客户的还款能力级别。
  • 计算逾期客户占比:对于每个还款能力级别,计算有逾期行为的客户占比。
  • 格式化输出:将逾期客户占比格式化为百分数,并保留一位小数。

3. 解决每个关键问题的代码及讲解

步骤1:获取客户的还款能力

我们使用JOINloan_tbcustomer_tb表连接起来:

FROM
    loan_tb lt
JOIN
    customer_tb ct ON lt.customer_id = ct.customer_id
  • ON lt.customer_id = ct.customer_id:通过客户ID进行连接。
步骤2:计算逾期客户占比

我们使用CASE WHEN语句来计算有逾期行为的客户数量,并计算占比:

SELECT
    ct.pay_ability,
    CONCAT(ROUND(SUM(CASE WHEN lt.overdue_days IS NOT NULL THEN 1 ELSE 0 END)/COUNT(*)*100,1),'%') AS overdue_ratio
  • CASE WHEN lt.overdue_days IS NOT NULL THEN 1 ELSE 0 END:判断客户是否有逾期行为,overdue_days字段不为NULL即记作1,否则记作0。
  • SUM(...):计算有逾期行为的客户数量,即上一步记作1的客户数量。
  • COUNT(*):计算总客户数量。
  • ROUND(...,1):将结果四舍五入保留一位小数。
  • CONCAT(...,'%'):输出格式为‘数字’+‘%’,此处使用字符串操作,CONCAT(A,B)即将A字符串和B字符串连接成‘AB’字符串。
步骤3:分组和排序

我们按还款能力级别分组,并按逾期客户占比降序排序:

GROUP BY
    ct.pay_ability
ORDER BY
    overdue_ratio DESC
  • GROUP BY ct.pay_ability:按还款能力级别分组。
  • ORDER BY overdue_ratio DESC:按逾期客户占比降序排序。

完整代码

SELECT
    ct.pay_ability,
    CONCAT(ROUND(SUM(CASE WHEN lt.overdue_days IS NOT NULL THEN 1 ELSE 0 END)/COUNT(*)*100,1),'%') AS overdue_ratio
FROM
    loan_tb lt
JOIN
    customer_tb ct ON lt.customer_id = ct.customer_id
GROUP BY
    ct.pay_ability
ORDER BY
    overdue_ratio DESC