select case when overdue_days > 0 then ‘逾期’ when overdue_days = 0 and remain_principal > 0 then ‘在贷’ end, count(distinct sso_id) as remain_cnt from ( (select * from p02.ods_fin_notify_sms_send_info where ( substring(business_batch_no, 1, 22) = 'SNO2023070417590292025' or substring(business_batch_no, 1, 22) = 'SNO2023052219260890070' ) and return_msg = '处理成功') as a left join ( select dayno, ssoid, overdue_days, remain_principal from p02.dwd_loan_user_loan_apply_all_d where dayno = 20230708 or dayno = 20230523 ) as b on substring(a.business_batch_no, -8) = b.dayno and a.sso_id = b.ssoid ) group by case when overdue_days > 0 then ‘逾期’ when overdue_days = 0 and remain_principal > 0 then ‘在贷’ end
时间: 2024-04-12 08:34:44 浏览: 18
以下是根据您提供的 SQL 查询语句进行的解释:
该查询语句是对两个子查询进行左连接,并根据条件进行筛选和计数。首先,子查询 a 从表 `p02.ods_fin_notify_sms_send_info` 中选择符合条件的记录,其中条件为 `business_batch_no` 的前22位等于 'SNO2023070417590292025' 或 'SNO2023052219260890070',并且 `return_msg` 等于 '处理成功'。然后,子查询 b 从表 `p02.dwd_loan_user_loan_apply_all_d` 中选择符合条件的记录,其中条件为 `dayno` 等于 20230708 或 20230523。
接下来,这两个子查询通过关联条件 `substring(a.business_batch_no, -8) = b.dayno and a.sso_id = b.ssoid` 进行左连接。
最后,根据 `overdue_days` 和 `remain_principal` 的值分类统计并计算独立的 `sso_id` 数量。当 `overdue_days > 0` 时,分类为 '逾期',当 `overdue_days = 0` 且 `remain_principal > 0` 时,分类为 '在贷'。
请注意,在 SQL 查询中使用的引号可能需要根据您的数据库系统进行适当调整。
相关问题
loop1: loop fetch cur into v_bookid, v_borrow_date, v_due_date; if done then leave loop1; end if; set v_overdue_days = datediff(curdate(), v_due_date); if v_overdue_days <= 30 then set v_fine = v_fine + 1; elseif v_overdue_days <= 90 then set v_fine = v_fine + 3; else set v_fine = v_fine + 5; end if; end loop loop1; 代码分析
这段代码是用来处理图书借阅记录的罚款问题的。它首先使用一个循环语句,从数据库中获取每一条借阅记录(即每本书的借阅时间和应还时间),并计算该记录的逾期天数。然后,根据逾期天数,计算该记录的罚款金额,并将其累加到变量 v_fine 中。最终,循环结束后,变量 v_fine 中存储的就是总的罚款金额。
具体的处理过程如下:
1. 定义一个循环标签 loop1,用于后面的循环语句中。
2. 使用 fetch 命令从游标 cur 中获取一条借阅记录,并将其分别存储到变量 v_bookid、v_borrow_date 和 v_due_date 中。
3. 如果已经获取到了所有的借阅记录,则执行 leave loop1 命令跳出循环。
4. 计算该借阅记录的逾期天数,并将其存储到变量 v_overdue_days 中。其中,使用函数 datediff(curdate(), v_due_date) 可以计算当前日期和应还日期之间的天数差。
5. 根据逾期天数计算该借阅记录的罚款金额,并将其累加到变量 v_fine 中。如果逾期天数小于等于 30 天,则罚款为 1 元;如果逾期天数小于等于 90 天,则罚款为 3 元;如果逾期天数超过 90 天,则罚款为 5 元。
6. 循环回到第 2 步,继续处理下一条借阅记录,直到所有的借阅记录都处理完毕。
设逾期表为df,格式为pandas.DataFrame,详细数据如下所示,其中order_no为非 # 重复订单号,overdue_days为逾期天数,info_tabel为逾期标签,其中1表示逾期, # 0表示未逾期 import pandas
as pd
可以使用以下代码创建一个示例DataFrame:
```python
data = {'order_no': ['A001', 'A002', 'A003', 'A004', 'A005'],
'overdue_days': [1, 0, 3, 2, 0],
'info_table': [1, 0, 1, 1, 0]}
df = pd.DataFrame(data)
```
这个DataFrame包含了5个订单,每个订单都有一个对应的逾期天数和逾期标签。其中第1个、第3个、第4个订单逾期了,分别对应逾期天数1、3、2天,对应的逾期标签为1。而第2个、第5个订单没有逾期,分别对应逾期天数0、0天,对应的逾期标签为0。