Как отсортировать объекты так, что б часть из них (по условию) всегда была в конце?
Вариант 1SELECT .... WHERE price > 0 AND ... ORDER BY ...
UNION
SELECT .... WHERE price = 0 AND ... ORDER BY ...
Вариант 2SELECT ... IF (price > 0, 1, 0) as has_price  ... ORDER BY has_price  DESC ...
Вариант 3
Аналогичен варианту 2, но has_price хранить явно в базе
PS Считаю что самый правильный 3й
SELECT * FROM goods .... ORDER BY <ваша выборка>, price DESC