# 输出每位用户再2024年2月份的相关指标

with
t1 as(
    select
        customer_name,
        order_date,
        order_id,
        qty,
        price
    from
        orders
        left join customers using(customer_id)
        left join order_items using(order_id)
    where
        order_date between '2024-02-01' and '2024-02-28'
)
,
t2 as(
    select
        customer_name,
        count(distinct order_id) as feb_2024_order_count,
        round(sum(qty*price),2) as feb_2024_total_amount,
        round(sum(qty*price)/count(distinct order_id),2) as feb_2024_avg_order_amount
    from
        t1
    group by
        customer_name
)
,
t3 as(
    select
        customer_name,
        order_date,
        dense_rank()over(partition by customer_name order by order_date) as first_order_date,
        dense_rank()over(partition by customer_name order by order_date desc) as last_order_date
    from
        t1
)
,
t4 as(
    select distinct
        customer_name,
        order_date as feb_2024_first_order_date
    from
        t3
    where
        first_order_date=1
)
,
t5 as(
    select distinct
        customer_name,
        order_date as feb_2024_last_order_date
    from
        t3
    where
        last_order_date=1
)
,
t6 as(
    select
        customer_id,
        customer_name,
        if(feb_2024_order_count is null,0,feb_2024_order_count) as feb_2024_order_count,
        if(feb_2024_total_amount is null,0.00,feb_2024_total_amount) as feb_2024_total_amount,
        if(feb_2024_avg_order_amount is null,0.00,feb_2024_avg_order_amount) as feb_2024_avg_order_amount,
        feb_2024_first_order_date,
        feb_2024_last_order_date
    from
        customers
        left join t2 using(customer_name)
        left join t4 using(customer_name)
        left join t5 using(customer_name)
    order by
        feb_2024_total_amount desc,
        customer_id
)

select * from t6