Saya pikir untuk urutan per bagian Anda harus menggunakan sesuatu seperti
order by case
when stock > 0 then 0
when stock < 0 then 1
end ascending,
price ascending
Saya tidak memeriksa sintaksnya tetapi itulah idenya. Anda dapat mencari di google case untuk info lebih lanjut.
Adapun persyaratan Anda lainnya, saya memerlukan struktur tabel untuk lebih memahami...