select
    product_id,
    product_name,
    type,
    price
from
    (
        select
            *,
            row_number() over (
                partition by
                    type
                order by
                    price desc
            ) as rk
        from
            product_info
    ) aa
where
    rk < 3
order by
    price desc,
    product_name
limit
    3;