select
    product_id,
    product_name,
    category_id,
    sales_amount,
    profit_rate
from(
    select
        s.product_id,
        product_name,
        category_id,
        sales_amount,
        round((sales_amount-cost_amount)/sales_amount, 2) as profit_rate,
        rank() over(partition by category_id order by sales_amount desc) as rk
    from sales_and_profit s 
    left join product_category p 
    on s.product_id = p.product_id
) aa
where rk <= 3 and profit_rate > 0.2
order by category_id, sales_amount desc, product_id
;