select product_id ,product_name ,type ,price from ( select rank() over(partition by t1.type order by price desc ) as rk ,product_id ,product_name ,type ,price from product_info t1 ) t2 where rk <= 2 order by price desc ,product_name limit 3