Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL เรียงข้อมูลให้ค่ามากกว่า 0 อยู่ก่อน

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 ทำงานได้โดยตรง