Dapat menggunakan SIGN untuk mengurutkan bilangan positif ke atas, lalu ambil nilai absolutnya dengan ABS untuk mendapatkan ASC/DESC yang diinginkan.
SELECT * FROM theTable
ORDER BY SIGN(col) DESC, ABS(col)
EDIT
Seperti yang ditunjukkan Nahuel, di atas akan mengurutkan 0 ke tengah antara positif dan negatif. Untuk mengelompokkannya dengan positif, Anda dapat menggunakan CASE
sebagai gantinya (atau, jika kolom Anda hanya bilangan bulat, SIGN(col + 1)
. yang sedikit ajaib )
SELECT * FROM theTable
ORDER BY
CASE WHEN col >= 0 THEN 1 ELSE 2 END,
ABS(col)