Вы можете сделать это, присоединив таблицу к себе, с условием, что цена в объединенной таблице будет меньше, чем цена в оригинале, а затем посчитать количество строк в объединенной таблице, чтобы создать порядок.Например:
SELECT p1.product_category, p1.name, p1.price, COUNT(*) AS row_number
FROM Product p1
JOIN Product p2 ON p2.product_category = p1.product_category AND p2.price <= p1.price
GROUP BY p1.product_category, p1.price, p1.name
ORDER BY p1.product_category, row_number
Обратите внимание, что если включен режим only_full_group_by
, необходимо включить все поля в предложении GROUP BY
, как и в SELECT
(как я сделал для этого примера запроса).
Вывод (для моей демонстрации на dbfiddle ):
product_category name price row_number
clothing tie 20.00 1
clothing shirt 35.99 2
clothing coat 55.20 3
furniture chair 20.50 1
furniture table 108.00 2
furniture sofa 134.00 3
furniture bed 220.00 4