select
    product_id,
    product_name,
    category_id,
    sales_amount,
    profit_rate
from
    (
        SELECT
            p.product_id,
            product_name,
            category_id,
            sales_amount,
            round((sales_amount - cost_amount) / sales_amount, 2) AS profit_rate,
            row_number() over (
                PARTITION BY
                    category_id
                ORDER BY
                    sales_amount DESC
            ) AS rk
        FROM
            product_category p
            LEFT JOIN sales_and_profit s ON p.product_id = s.product_id
    ) t
where
    rk <= 3
    and profit_rate > 0.2
order by
    3,
    4 desc,
    1