with rank_salary as ( select product_id, product_name, type, price, rank() over ( partition by type order by price desc ) as r from product_info group by type,product_id ) select product_id, product_name, type, price from rank_salary where r <= 2 order by price desc, product_name limit 3