select b.city,round(sum(loan_amount),2) total_loan_amount,round(sum(loan_amount)/count(distinct b.customer_id ),2) average_loan_amount,round(count(distinct b.customer_id ),2) total_customers,max(loan_type_name) most_applied_loan_type
from loan_applications e
inner join customers b on e.customer_id=b.customer_id
inner join loan_application_types d on e.application_id=d.application_id
inner join (
select city,loan_type_name,loan_type_id,rank() over(partition by city, loan_type_id order by c desc,loan_type_id) r
from(select
city,loan_type_name,l3.loan_type_id,count(1) c
from loan_applications l1
inner join customers c on l1.customer_id=c.customer_id
inner join loan_application_types l2 on l2.application_id=l1.application_id
inner join loan_types l3 on l3.loan_type_id=l2.loan_type_id
group by city,loan_type_name,l3.loan_type_id
) a1 ) a on a.loan_type_id=d.loan_type_id and a.city=b.city and r=1
group by b.city
order by b.city