Myslím, že pro řazení po částech byste měli použít něco jako
order by case
when stock > 0 then 0
when stock < 0 then 1
end ascending,
price ascending
Syntaxi jsem nekontroloval, ale je to tak. Pro více informací si můžete vygooglit pouzdro.
Pokud jde o požadavky vás ostatních, potřeboval bych strukturu tabulky, abych lépe porozuměl...