Вы можете использовать подзапрос, который возвращает минимальную цену для каждого car_id в предложении ORDER BY:
select t.*
from tablename t
order by
(select min(price) from tablename where car_id = t.car_id),
car_id,
price
См. Демонстрационную версию . Или присоедините таблицу к подзапросу, который возвращает все минимальные цены:
select t.*
from tablename t inner join (
select car_id, min(price) minprice
from tablename
group by car_id
) m on m.car_id = t.car_id
order by
m.minprice,
t.car_id,
t.price
См. Демоверсию . Результаты:
| car_id | price |
| ------ | ----- |
| 2 | 1 |
| 2 | 3 |
| 2 | 10 |
| 1 | 2 |
| 1 | 5 |
| 3 | 3 |
| 3 | 7 |
| 3 | 8 |