Tôi nghĩ đối với thứ tự từng phần, bạn nên sử dụng một cái gì đó như
order by case
when stock > 0 then 0
when stock < 0 then 1
end ascending,
price ascending
Tôi đã không kiểm tra cú pháp nhưng đó là ý tưởng. Bạn có thể google case theo thứ tự để biết thêm thông tin.
Đối với các yêu cầu còn lại của bạn, tôi sẽ cần cấu trúc bảng để hiểu rõ hơn ...