with
lsb1 as (
select
c.customer_id,
c.customer_name,
sum(
case
when t.order_id is null then 0
else 1
end
) as feb_2024_order_count,
min(t.order_date) as feb_2024_first_order_date,
max(t.order_date) as feb_2024_last_order_date
from
customers c
left join (
select
*
from
orders
where
date_format(order_date, '%Y-%m') = '2024-02'
) t on c.customer_id = t.customer_id
group by
c.customer_id,
c.customer_name
),
lsb2 as (
select
o.customer_id,
sum(oi.qty * oi.price) as feb_2024_total_amount
from
orders o
join order_items oi on o.order_id = oi.order_id
where
date_format(o.order_date, '%Y-%m') = '2024-02'
group by
o.customer_id
)
select
l1.customer_id,
l1.customer_name,
l1.feb_2024_order_count,
round((case when l2.feb_2024_total_amount is null then 0 else l2.feb_2024_total_amount end), 2) as feb_2024_total_amount,
round((case when l2.feb_2024_total_amount is null then 0 else l2.feb_2024_total_amount/l1.feb_2024_order_count end), 2) as feb_2024_avg_order_amount,
l1.feb_2024_first_order_date,
l1.feb_2024_last_order_date
from
lsb1 l1
left join lsb2 l2 on l1.customer_id = l2.customer_id
order by feb_2024_total_amount desc, l1.customer_id asc