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

วิธีเรียงลำดับคอลัมน์ใน MySQL ให้ค่า 0 อยู่ท้ายสุด

เทคนิค ORDER BY กับเงื่อนไข Boolean

ใน MySQL เงื่อนไข Boolean จะคืนค่า 1 (true) หรือ 0 (false) ใช้หลักการนี้เพื่อให้ 0 เรียงท้าย

รูปแบบคำสั่ง

SELECT * FROM yourTableName 
ORDER BY yourFieldName = 0, yourFieldName;

ตัวอย่างการสร้างตารางและข้อมูล

mysql> CREATE TABLE SortColumnZeroAtLastDemo (
    -> RankNumber INT
    -> );
Query OK, 0 rows affected (1.40 sec)

mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(100);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(0);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(0);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(50);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(10);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(0);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(40);

ข้อมูลก่อนเรียง

mysql> SELECT * FROM SortColumnZeroAtLastDemo;
+------------+
| RankNumber |
+------------+
| 100        |
| 0          |
| 0          |
| 50         |
| 10         |
| 0          |
| 40         |
+------------+
7 rows in set (0.00 sec)

คำสั่งเรียง 0 ไปท้าย

mysql> SELECT * FROM SortColumnZeroAtLastDemo 
    -> ORDER BY RankNumber = 0, RankNumber;
+------------+
| RankNumber |
+------------+
| 10         |
| 40         |
| 50         |
| 100        |
| 0          |
| 0          |
| 0          |
+------------+
7 rows in set (0.00 sec)

อธิบายการทำงาน:

  • RankNumber = 0 คืนค่า 1 (true) สำหรับค่า 0, คืน 0 (false) สำหรับค่าอื่น
  • MySQL เรียงจากค่าน้อยไปมาก (ASC) ดังนั้น false (0) จะอยู่ก่อน true (1)
  • ค่าที่ไม่ใช่ 0 จะถูกเรียงตามค่าตัวเลขปกติ
  • ค่า 0 ทั้งหมดจะถูกกลุ่มไว้ท้ายสุด

รูปแบบอื่นที่เทียบเท่า:

ORDER BY CASE WHEN yourFieldName = 0 THEN 1 ELSE 0 END, yourFieldName
ORDER BY IF(yourFieldName = 0, 1, 0), yourFieldName