select product_name,total_sales,

row_number() over(partition by category order by total_sales desc, product_id) as category_rank
from(
    select p.product_id,p.name as product_name,p.category,sum(o.quantity) as total_sales
    from products p
    join orders o
    on p.product_id = o.product_id
    group by product_id,product_name,category
)a

order by category,total_sales desc

category的分类是最外层的,大于product_id分类,所以内层查询可以先计算出total_sales