ORDER BY ให้ค่า 0 อยู่ท้าย ค่า > 0 เรียงจากน้อยไปมาก
ใช้ Expression Value = 0 ใน ORDER BY (คืน 0/1) แล้วตามด้วย Value
ตัวอย่างข้อมูล
+----+-------+ | Id | Value | +----+-------+ | 1 | 10 | | 2 | 13 | | 3 | 0 | | 4 | 20 | | 5 | 30 | | 6 | 60 | | 7 | 0 | | 8 | 45 | | 9 | 0 | +----+-------+
คำสั่ง ORDER BY
SELECT * FROM gettingAndOrderingRowsDemo ORDER BY Value = 0, Value;
ผลลัพธ์
+----+-------+ | Id | Value | +----+-------+ | 1 | 10 | | 2 | 13 | | 4 | 20 | | 5 | 30 | | 8 | 45 | | 6 | 60 | | 3 | 0 | | 7 | 0 | | 9 | 0 | +----+-------+
การทำงาน
Value = 0คืน 1 (True) สำหรับค่า 0, คืน 0 (False) สำหรับค่า > 0- ORDER BY เรียง False (0) ก่อน True (1) → ค่า > 0 อยู่บน
- จากนั้น เรียง Value ASC ภายในกลุ่มเดียวกัน
การประยุกต์
ORDER BY (col = 0), col DESC- 0 ท้าย, มากไปน้อยORDER BY (col IS NULL), col- NULL ท้ายORDER BY (col < 0), col- ติดลบท้าย- MySQL: Boolean Expression ใน ORDER BY ทำงานได้โดยตรง