Có thể sử dụng SIGN để sắp xếp các số dương lên đầu, sau đó lấy giá trị tuyệt đối bằng ABS để có được ASC / DESC mong muốn.
SELECT * FROM theTable
ORDER BY SIGN(col) DESC, ABS(col)
CHỈNH SỬA
Như Nahuel đã chỉ ra, phần trên sẽ sắp xếp số 0 ở giữa tích cực và tiêu cực. Thay vào đó, để nhóm chúng với các mặt tích cực, bạn có thể sử dụng CASE
thay vào đó (hoặc, nếu cột của bạn chỉ là số nguyên, thì SIGN(col + 1)
hơi kỳ diệu )
SELECT * FROM theTable
ORDER BY
CASE WHEN col >= 0 THEN 1 ELSE 2 END,
ABS(col)