with
    max_type as (--统计每个城市每种类型贷款的数量
        select
            city,
            lat.loan_type_id,
            loan_type_name,
            row_number() over (
                partition by
                    city
                order by
                    count(lat.loan_type_id) desc,
                    loan_type_id
            ) ranking
        from
            loan_applications la
            left join customers c on (la.customer_id = c.customer_id)
            left join loan_application_types lat on (la.application_id = lat.application_id)
            left join loan_types lt on (lat.loan_type_id = lt.loan_type_id)
        group by
            city,
            loan_type_id,
            loan_type_name
    ),
    max_ as (--选出每个城市贷款数量第一的贷款名称
        select
            city,
            loan_type_name
        from
            max_type
        where
            ranking = 1
    ),
    loan_sum as (--统计每个城市贷款总金额、平均金额、人数
        select
            city,
            sum(loan_amount) total_loan_amount,
            round(sum(loan_amount)/count(distinct la.customer_id),2) average_loan_amount,
            count(distinct la.customer_id) total_customers
        from
            loan_applications la
            left join customers c on (la.customer_id = c.customer_id)
            left join loan_application_types lat on (la.application_id = lat.application_id)
            left join loan_types lt on (lat.loan_type_id = lt.loan_type_id)
        group by
            city
    )
select
    l.city,
    total_loan_amount,
    average_loan_amount,
    total_customers,
    m.loan_type_name as most_applied_loan_type
from
    loan_sum l
    left join max_ m on (l.city = m.city)
order by city