Để sắp xếp cột số nguyên tăng dần nhưng đẩy các giá trị 0 về cuối, dùng ORDER BY column = 0, column.
Ví dụ minh họa
Tạo bảng và chèn dữ liệu có nhiều 0:
CREATE TABLE reorderIntegerExcept0 (value INT); INSERT INTO reorderIntegerExcept0 VALUES (90), (10), (0), (40), (0), (50), (80), (0), (300);
Dữ liệu gốc:
+-------+ | value | +-------+ | 90 | | 10 | | 0 | | 40 | | 0 | | 50 | | 80 | | 0 | | 300 | +-------+
Sắp xếp tăng dần, 0 ở cuối:
SELECT * FROM reorderIntegerExcept0 ORDER BY value = 0, value;
Kết quả:
+-------+ | value | +-------+ | 10 | | 40 | | 50 | | 80 | | 90 | | 300 | | 0 | | 0 | | 0 | +-------+
Sắp xếp giảm dần, 0 vẫn ở cuối:
SELECT * FROM reorderIntegerExcept0 ORDER BY value = 0, value DESC;
Kết quả:
+-------+ | value | +-------+ | 300 | | 90 | | 80 | | 50 | | 40 | | 10 | | 0 | | 0 | | 0 | +-------+
Giải thích:
value = 0là biểu thức boolean: trả về1(TRUE) nếu value = 0, ngược lại0(FALSE).ORDER BY value = 0sắp xếp FALSE (0) trước, TRUE (1) sau → các số ≠ 0 lên đầu, 0 xuống cuối.- Phụ kiện thứ 2
value(hoặcvalue DESC) sắp xếp bên trong mỗi nhóm.
Mở rộng: Để đẩy NULL về cuối: ORDER BY column IS NULL, column.