Ich denke, für die Reihenfolge nach Teilen sollten Sie so etwas wie
verwendenorder by case
when stock > 0 then 0
when stock < 0 then 1
end ascending,
price ascending
Ich habe die Syntax nicht überprüft, aber das ist die Idee. Für weitere Informationen können Sie die Groß- und Kleinschreibung in Google eingeben.
Für den Rest Ihrer Anforderungen bräuchte ich die Tabellenstruktur, um besser zu verstehen ...