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