with sales_amount_rank as (
select
sp.product_id,
pc.product_name,
pc.category_id,
sp.sales_amount,
sp.cost_amount,
row_number() over(partition by category_id order by sales_amount desc) as rn
from
sales_and_profit as sp
left join
product_category as pc
on
sp.product_id = pc.product_id
)
select
product_id,
product_name,
category_id,
sales_amount,
round((sales_amount - cost_amount) / sales_amount,2) as profit_rate
from
sales_amount_rank
where
rn <= 3
and
(sales_amount - cost_amount) / sales_amount > 0.2
order by
category_id,
sales_amount desc,
product_id