这道题目要求我们分析不同还款能力级别的客户逾期情况,计算每个还款能力级别的客户中有逾期行为的客户占比,并按占比降序排序。下面是这个SQL查询的思路和实现步骤。
1. 确定总体问题
我们需要计算每个还款能力级别的客户中有逾期行为的客户占比。逾期行为的定义是overdue_days字段不为NULL。
2. 分析关键问题
- 获取客户的还款能力:我们需要将
loan_tb和customer_tb表连接起来,以便获取每个客户的还款能力级别。 - 计算逾期客户占比:对于每个还款能力级别,计算有逾期行为的客户占比。
- 格式化输出:将逾期客户占比格式化为百分数,并保留一位小数。
3. 解决每个关键问题的代码及讲解
步骤1:获取客户的还款能力
我们使用JOIN将loan_tb和customer_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

京公网安备 11010502036488号