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

เรียงลำดับ MySQL ให้ค่า 0 อยู่ท้ายสุด ด้วย ORDER BY เงื่อนไข

เมื่อต้องการเรียงลำดับตัวเลขแต่ให้ค่า 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