Đơn giản hơn:
SELECT *
FROM tasks
ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
Làm thế nào?
Postgres có boolean thích hợp loại (không giống như một số RDBMS khác). Bạn có thể đặt hàng theo nó giống như bất kỳ kiểu dữ liệu nào khác. Và nó có thể là NULL giống như bất kỳ kiểu dữ liệu nào khác. Thứ tự sắp xếp mặc định là:
FALSE (0)
TRUE (1)
NULL
(sort IS NOT DISTINCT FROM -1) đánh giá thành FALSE cho tất cả các giá trị ngoại trừ -1 - đánh giá TRUE và sắp xếp cuối cùng. Chỉ cần thêm sort làm ORDER BY phụ mặt hàng.
Thay thế tương đương:
SELECT *
FROM tasks
ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
db <> fiddle here
Sqlfiddle cũ