Myślę, że dla kolejności po części powinieneś użyć czegoś takiego
order by case
when stock > 0 then 0
when stock < 0 then 1
end ascending,
price ascending
Nie sprawdzałem składni, ale taki jest pomysł. Możesz wyszukać w Google przypadek w celu uzyskania więcej informacji.
Jeśli chodzi o pozostałe wymagania, potrzebuję struktury tabeli, aby lepiej zrozumieć...