with t as( select p.product_id, p.product_name, p.category_id, coalesce(s.sales_amount,0) as sales_amount, round(coalesce((s.sales_amount-s.cost_amount)/s.sales_amount,0),2) as profit_rate, row_number() over(partition by p.category_id order by s.sales_amount desc) as sale_rank from product_category p left join sales_and_profit s on p.product_id=s.product_id) select t.product_id, t.product_name, t.category_id, t.sales_amount, t.profit_rate from t where t.sale_rank<=3 and t.profit_rate>=0.2 order by t.category_id,t.sales_amount desc,t.product_id