with a as (
select category,
ifnull(count(distinct oi.order_id),0) orders_cnt,
ifnull(count(distinct buyer_id),0) buyers_cnt,
ifnull(sum(qty),0) items_qty,
ifnull(sum(qty*price),0) revenue,
round(ifnull(sum(qty*price)/count(distinct oi.order_id),0),2) avg_order_value
from order_items oi
inner join orders o on oi.order_id=o.order_id
right join product p on p.product_id=oi.product_id
where date_format(order_date,'%Y%m')=202408 or order_date is null
group by category)
select category,
orders_cnt,
buyers_cnt,
items_qty,
revenue,
avg_order_value,
rank() over( order by revenue desc,orders_cnt desc,category asc) rank_by_revenue
from a
order by revenue desc,orders_cnt desc,category asc