WITH t1 AS ( SELECT product_id, rank() over(partition by type order by price DESC) rk FROM product_info ) SELECT product_id, product_name, type, price FROM product_info JOIN t1 USING(product_id) WHERE t1.rk <= 2 ORDER BY price DESC, product_name LIMIT 3