select
    product_id,
    product_name,
    type,
    price
from
    (
        with rank_product_info as(
            select 
                product_id,
                price,
                type,
                product_name,
                rank() over(partition by type order by price desc) as ranking
            from product_info
        )
        select *
        from rank_product_info
        where ranking < 3
    ) as top2_product_info
order by 
    price desc, product_id
limit 3