【蚂蚁】按还款能力分析客户逾期率
JOIN 连接聚合函数GROUP BYCASE WHEN异常检测面试真题
题目描述
来源:蚂蚁 SQL 面试真题
某金融平台需要根据客户的还款能力级别分析逾期情况,统计每个还款能力级别中发生过逾期行为的客户占比。
数据表
loan_tb 贷款信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| agreement_id | BIGINT | 合同 ID |
| customer_id | BIGINT | 客户 ID |
| loan_amount | DECIMAL | 贷款金额 |
| pay_amount | DECIMAL | 已还金额 |
| overdue_days | INT | 逾期天数,NULL 或 0 表示未逾期 |
customer_tb 客户信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| customer_id | BIGINT | 客户 ID |
| customer_age | INT | 客户年龄 |
| pay_ability | VARCHAR | 还款能力级别 |
题目要求
请按照 pay_ability 统计有逾期行为客户占比。
- 逾期行为定义为客户至少有一份合同的
overdue_days > 0。 NULL或 0 天逾期均不算逾期。- 同一客户可能存在多份贷款合同,但在分子中只能计算一次。
- 客户占比的分母为该还款能力级别的客户总数。
- 占比以百分数形式输出,四舍五入保留 1 位小数,例如
66.7%。 - 结果按逾期客户占比降序排列;占比相同按
pay_ability升序排列。
期望输出列
| 列名 | 说明 |
|---|---|
| pay_ability | 还款能力级别 |
| overdue_ratio | 逾期客户占比,百分数格式 |
数据样例
| agreement_idPKBIGINT | customer_idBIGINT | loan_amountDECIMAL(12, 2) | pay_amountDECIMAL(12, 2) | overdue_daysINT |
|---|---|---|---|---|
| 10111 | 1111 | 20000 | 18000 | NULL |
| 10112 | 1112 | 10000 | 10000 | NULL |
| 10113 | 1113 | 15000 | 10000 | 38 |
| 10114 | 1114 | 50000 | 30000 | NULL |
| 10115 | 1115 | 60000 | 50000 | NULL |
| 10116 | 1116 | 10000 | 8000 | NULL |
| 10117 | 1117 | 50000 | 50000 | NULL |
| 10118 | 1118 | 25000 | 10000 | 5 |
输入数据显示 8 / 9 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里