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 16:34:44 浏览: 79
以下是根据您提供的 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; 什么意思
这是一段 SQL 代码,其中包含一个循环语句,对于每个借阅记录,计算逾期天数并根据逾期天数计算罚款金额。循环中的变量 v_bookid、v_borrow_date 和 v_due_date 分别表示图书编号、借阅日期和应还日期。如果逾期天数小于等于 30 天,则罚款为 1 元;如果逾期天数小于等于 90 天,则罚款为 3 元;如果逾期天数超过 90 天,则罚款为 5 元。最终,变量 v_fine 存储总罚款金额。
解读--P0 select date(repay_date) repay_dt, count(1) cnt, sum(case when repay_status=2 then 1 end) repay_cnt, sum(plan_principal+plan_interest+plan_period_service+plan_financing_consulting_fee+coalesce(plan_other_fee,0)) plan_amt, sum(actual_principal+actual_interest+actual_period_service+actual_financing_consulting_fee+coalesce(actual_other_fee,0))actual_amount from (select agg.etl_date,agg.contr_num,agg.reloan_user,i.irr_flag from dm_fk.agg_speed_withhold_aggregation agg ---资产表 left join (select contr_num,irr_flag from dm_fk.agg_speed_withhold_irrflag --费率表 where etl_date='2023-01-31' ) i on agg.contr_num=i.contr_num where agg.etl_date in( '2022-12-31' )--上月底未结清C账户 and cast(overdue_pird_num as int)=0 and clear_flag='0' and agg.platform_nm not in('保理分期','恒易融')) t left join dm_fk.o_assets_xd_new_repay_plan_s p --还款计划表 on t.contr_num =p.contract_number where p.etl_date>=date('2023-01-01') and date(date_trunc('month',repay_date))=date_add('day',1,date(t.etl_date))--账单日为1月 --and date_diff('day',date(repay_date),p.etl_date) >=-6 and date_diff('day',date(repay_date),p.etl_date)=0 --账单日当天分区 根据还款计算获取实还金额 group by 1
这是一段 SQL 查询语句,主要用于从不同的数据表中获取特定的数据并进行统计分析。具体来说,该查询语句的目的是获取某个月份的贷款还款数据。查询语句中使用了多个关键字和函数,下面对其进行逐一解释:
1. select:表示要查询的字段。
2. count:表示统计某个字段的数量。
3. sum:表示求和某个字段的值。
4. case when ... then ... end:表示条件语句,根据条件返回不同的值。
5. left join:表示左连接操作,将两个表按照某个字段进行连接。
6. where:表示筛选条件。
7. group by:表示按照某个字段进行分组。
具体地,该查询语句从两个表中获取数据,分别是资产表和还款计划表。其中,资产表中包含了贷款的基本信息,还款计划表中包含了每个贷款的详细还款计划。查询语句中的条件语句可以筛选出符合要求的贷款,并统计相关的还款数据。最后,使用 group by 对结果进行分组,得到最终的统计数据。
阅读全文