with t as(select product_id,
    product_name,
    type,
    price,
    dense_rank() over(PARTITION by type order by price desc) as rk
from product_info)
select product_id,
    product_name,
    type,
    price
from t
where rk <= 2
order by price desc, product_name limit 3