-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSQL_LOAN_INSIGHTS.sql
More file actions
230 lines (170 loc) · 4.96 KB
/
SQL_LOAN_INSIGHTS.sql
File metadata and controls
230 lines (170 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
create database Bank;
use bank;
#01.Total Clients
SELECT COUNT(DISTINCT `Client id`) AS Total_Clients
FROM banking_dataset;
#01.Active Clients
SELECT COUNT(DISTINCT `Client id`) AS Active_Clients
FROM banking_dataset
WHERE `Loan Status` = 'Active';
#02.New Clients
SELECT
`Client id`,
MIN(`Disbursement Date`) AS First_Loan_Date
FROM banking_dataset
GROUP BY `Client id`;
SELECT
b.`Branch Name`,
COUNT(*) AS New_Clients
FROM (
SELECT
`Client id`,
`Branch Name`,
MIN(`Disbursement Date`) AS First_Loan_Date
FROM banking_dataset
GROUP BY `Client id`, `Branch Name`
) AS b
WHERE First_Loan_Date BETWEEN '2023-01-01' AND '2023-03-31'
GROUP BY b.`Branch Name`;
#03.Client Rotation Rate
WITH previous_period AS (
SELECT DISTINCT `Client id`
FROM banking_dataset
WHERE `Disbursement Date` BETWEEN '2023-01-01' AND '2023-03-31'
),
current_period AS (
SELECT DISTINCT `Client id`
FROM banking_dataset
WHERE `Disbursement Date` BETWEEN '2023-04-01' AND '2023-06-30'
),
returning_clients AS (
SELECT c.`Client id`
FROM current_period c
INNER JOIN previous_period p ON c.`Client id` = p.`Client id`
)
SELECT
(SELECT COUNT(*) FROM returning_clients) AS Returning_Clients,
(SELECT COUNT(*) FROM previous_period) AS Previous_Period_Clients,
ROUND(
(SELECT COUNT(*) FROM returning_clients) * 100.0 /
(SELECT COUNT(*) FROM previous_period),
2
) AS Client_Retention_Rate_Percentage;
#04.Total Loan Amount Disbursed
SELECT
`Branch Name`,
round(sum(`Loan Amount`) / 1000000, 2) AS Total_Loan_Amount_Disbursed_M
FROM banking_dataset
GROUP BY `Branch Name`
ORDER BY Total_Loan_Amount_Disbursed_M DESC;
#05.Total Funded Amount
SELECT
`Branch Name`,
ROUND(SUM(`Funded Amount`) / 1000000, 2) AS Total_Funded_Amount_M
FROM banking_dataset
GROUP BY `Branch Name`
ORDER BY Total_Funded_Amount_M DESC;
#06.Average Loan Size
SELECT
`Branch Name`,
ROUND(AVG(`Loan Amount`) / 1000, 2) AS Average_Loan_Size_K
FROM banking_dataset
GROUP BY `Branch Name`
ORDER BY Average_Loan_Size_K DESC;
#07.Loan Growth Percentage
WITH last_period AS (
SELECT `Branch Name`, SUM(`Loan Amount`) AS Last_Period_Loan
FROM banking_dataset
WHERE `Disbursement Date` BETWEEN '2023-01-01' AND '2023-03-31'
GROUP BY `Branch Name`
),
this_period AS (
SELECT `Branch Name`, SUM(`Loan Amount`) AS This_Period_Loan
FROM banking_dataset
WHERE `Disbursement Date` BETWEEN '2023-04-01' AND '2023-06-30'
GROUP BY `Branch Name`
)
SELECT
t.`Branch Name`,
ROUND(
((t.This_Period_Loan - l.Last_Period_Loan) / l.Last_Period_Loan) * 100,
2
) AS Loan_Growth_Percentage
FROM this_period t
JOIN last_period l
ON t.`Branch Name` = l.`Branch Name`
ORDER BY Loan_Growth_Percentage DESC;
#08.Total Repayments Collected
SELECT
ROUND(SUM(`Total Pymnt`) / 1000000, 2) AS Total_Repayments_Collected_M
FROM Fact_Repayment;
#09.Principle Recovery Rate
SELECT
ROUND(
(SUM(r.`Total Rec Prncp`) / SUM(l.`Loan Amount`)) * 100,
2
) AS Principal_Recovery_Rate_Percentage
FROM Fact_Repayment r
CROSS JOIN banking_dataset l;
#10.Interest Income
SELECT
ROUND(SUM(`Total Rrec Int`) / 1000000, 2) AS Interest_Income_M
FROM Fact_Repayment;
#11.default Rate
SELECT
ROUND(
(SUM(CASE WHEN `Is Default Loan` = 'Y' THEN 1 ELSE 0 END) * 100.0) /
COUNT(*),
2
) AS Default_Rate_Percentage
FROM fact_repayment;
#12.Delinquency Rate
SELECT
ROUND(
(SUM(CASE WHEN `Is Delinquent Loan` = 'Y' THEN 1 ELSE 0 END) * 100.0) /
COUNT(*),
2
) AS Delinquency_Rate_Percentage
FROM Fact_repayment;
#13.On-Time Repayment %
SELECT
ROUND(
(SUM(CASE WHEN `Repayment Behavior` = 'On-Time' THEN 1 ELSE 0 END) * 100.0) /
COUNT(*),
2
) AS OnTime_Repayment_Percentage
FROM Fact_Repayment;
#14.Loan Distribution by Branch
SELECT
`Branch Name`,
ROUND(SUM(`Loan Amount`) / 1000000, 2) AS Total_Loan_Amount_M
FROM banking_dataset
GROUP BY `Branch Name`
ORDER BY Total_Loan_Amount_M DESC;
#15.Branch Performance Category Split
SELECT
`Branch Performance Category`,
COUNT(*) AS Total_Branches
FROM Dim_Branch
GROUP BY `Branch Performance Category`
ORDER BY Total_Branches DESC;
#16.Product-wise Loan Volume
SELECT
`Product ID`,
Round(SUM(`Loan Amount`) / 1000000,2) AS Total_Loan_Amount_M
FROM Banking_dataset
GROUP BY `Product ID`
ORDER BY Total_Loan_Amount_M DESC;
#17.Product Profitability
SELECT
b.`Product_ID`,
ROUND(SUM(r.`Total Rrec Int`), 2) AS Total_Interest_Income,
ROUND(SUM(b.`Funded Amount Inv`), 2) AS Total_Funded_Inv_Amount,
ROUND(SUM(r.`Total Rrec Int`) / SUM(b.`Funded Amount Inv`), 4) AS Product_Profitability
FROM banking_dataset b
JOIN fact_repayment r
ON b.`Product_ID` = r.`Product_ID`
WHERE r.`Total Rrec Int` IS NOT NULL
AND b.`Funded Amount Inv` IS NOT NULL
GROUP BY b.`Product_ID`
ORDER BY Product_Profitability DESC;