เมื่อต้องการเรียงลำดับตัวเลขแต่ให้ค่า 0 (หรือค่าเฉพาะ) อยู่ท้ายสุด ให้ใช้เงื่อนไข Boolean ใน ORDER BY เนื่องจากใน MySQL FALSE=0 และ TRUE=1 การเรียง ASC จะวาง FALSE (0) ก่อน TRUE (1)
รูปแบบคำสั่ง
SELECT * FROM yourTableName ORDER BY yourColumnName=0, yourColumnName;
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล (มีค่า 0 สองแถว):
mysql> create table DemoTable1348 (Amount int); mysql> insert into DemoTable1348 values(100),(0),(90),(45),(0),(89);
ข้อมูลต้นฉบับ:
+--------+ | Amount | +--------+ | 100 | | 0 | | 90 | | 45 | | 0 | | 89 | +--------+
คำสั่งเรียง: ค่าไม่ใช่ 0 เรียงน้อยไปมาก แล้วค่า 0 อยู่ท้าย
mysql> select * from DemoTable1348 order by Amount=0, Amount;
ผลลัพธ์
+--------+ | Amount | +--------+ | 45 | | 89 | | 90 | | 100 | | 0 | | 0 | +--------+
คำอธิบาย:
Amount=0คืนค่า 1 (TRUE) สำหรับแถวที่เป็น 0, คืน 0 (FALSE) สำหรับแถวอื่นORDER BY Amount=0 ASC(Default) จะวาง FALSE (ค่าไม่ใช่ 0) ก่อน, TRUE (ค่า 0) ท้าย- ภายในกลุ่มเดียวกัน เรียงตาม
Amountต่อ (45, 89, 90, 100) - เทคนิคนี้ใช้ได้กับค่าเฉพาะเจาะจงอื่นๆ เช่น
ORDER BY status='cancelled', status