【题目】
一家金融贷款公司,需要了解用户贷款逾期未还的情况。该公司数据库中有一张用户"贷款逾期天数"表。
用户ID | 逾期天数 |
---|---|
1 | 45 |
2 | 85 |
3 | 3 |
4 | 9 |
5 | 38 |
6 | 47 |
7 | 117 |
8 | 53 |
9 | 20 |
10 | 36 |
…… | …… |
当逾期天数=0时,记为M0,
逾期天数在[1,30]区间时,记为M1,
逾期天数在[31,60]区间时, 记为M2,
逾期天数在[61,90]区间时,记为M3,
其他更高的逾期天数记为M4+,
现在需要在数据库中分析出每种逾期时段(M0、M1、M2、M3、M4+)的订单个数,如果是你,会如何分析呢?
【解题思路】
1.多条件判断
每个逾期时段(M0、M1、M2、M3、M4+)表示一种条件,这是典型的多条件判断业务问题。
遇到这种业务问题,要想到《猴子 从零学会SQL》里讲过的用case语句来解决多条件判断问题。
select
(case when 逾期天数=0 then 1 else 0 end) as "M0",
(case when 逾期天数 between 1 and 30 then 1 else 0 end) as "M1",
(case when 逾期天数 between 31 and 60 then 1 else 0 end) as "M2",
(case when 逾期天数 between 61 and 90 then 1 else 0 end) as "M3",
(case when 逾期天数>90 then 1 else 0 end) as "M4+"
from 逾期天数表;
2.每种逾期时段订单数
上面对满足逾期时间段的数据标记为“1”,不满足的标记为0 。例如,逾期时段M0(逾期天数=0)
(case when 逾期天数=0 then 1 else 0 end) as "M0"
现在要得到每种逾期时段订单数,那么只需要对每逾期时段里标记为1的值进行统计求和就可以,也就是在上一步SQL里加上求和函数sum。
select
sum(case when 逾期天数=0 then 1 else 0 end) as "M0",
sum(case when 逾期天数 between 1 and 30 then 1 else 0 end) as "M1",
sum(case when 逾期天数 between 31 and 60 then 1 else 0 end) as "M2",
sum(case when 逾期天数 between 61 and 90 then 1 else 0 end) as "M3",
sum(case when 逾期天数>90 then 1 else 0 end) as "M4+"
from 逾期天数表;
查询结果:
M0 | M1 | M2 | M3 | M4+ |
---|---|---|---|---|
1 | 16 | 12 | 12 | 10 |
【本题考点】