select product_id, product_name, category_id, sales_amount, profit_rate

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