/*
①关联4个表,展示每一个贷款的相关信息
②以城市和贷款类型分组求出每个城市最常申请的贷款类型名称
③以城市分组求出其他指标
④关联两个表求出结果
*/

WITH
t1 AS (     -- 关联4个表,展示每一个贷款的相关信息
SELECT
    kehu.customer_id,
    kehu.city,
    daikuan.loan_amount,
    leixing.loan_type_id,
    leixing.loan_type_name
FROM customers AS kehu
LEFT JOIN loan_applications AS daikuan ON kehu.customer_id = daikuan.customer_id
LEFT JOIN loan_application_types AS fenlei ON daikuan.application_id = fenlei.application_id
LEFT JOIN loan_types AS leixing ON fenlei.loan_type_id = leixing.loan_type_id
),

t2 AS (     -- 以城市和贷款类型分组,使用窗口函数对各产品类型的销量进行排名
SELECT 
    city,
    loan_type_id,
    loan_type_name,
    ROW_NUMBER() OVER(PARTITION BY city ORDER BY COUNT(*) DESC,loan_type_id) AS rk
FROM t1
GROUP BY city,loan_type_name,loan_type_id
),

t3 AS (     -- 以城市分组求出其他指标
SELECT
    city,
    ROUND(SUM(loan_amount),2) AS total_loan_amount,
    ROUND(SUM(loan_amount) / COUNT(DISTINCT customer_id),2) AS average_loan_amount,
    COUNT(DISTINCT customer_id) AS total_customers
FROM t1
GROUP BY city
)

SELECT      -- 主查询,关联清洗后的数据,依题意输出结果
    t3.city,
    t3.total_loan_amount,
    t3.average_loan_amount,
    t3.total_customers,
    t2.loan_type_name AS most_applied_loan_type
FROM t3
LEFT JOIN t2 ON t3.city = t2.city AND t2.rk = 1
ORDER BY t3.city;