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

จัดลำดับข้อมูลด้วย ORDER BY โดยย้ายค่าเฉพาะไปท้ายสุดใน MySQL

บทนำ

บางครั้งต้องการจัดเรียงข้อมูลแบบปกติ แต่ย้ายค่าเฉพาะบางค่าไปอยู่ท้ายสุด (หรือหน้าสุด) สามารถทำได้โดยใช้เงื่อนไข Boolean ใน ORDER BY

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

mysql> CREATE TABLE DemoTable (
    -> Status INT
    -> );
Query OK, 0 rows affected (0.66 sec)
mysql> INSERT INTO DemoTable VALUES(30);
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(30);
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(40);

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+--------+
| Status |
+--------+
| 30     |
| 20     |
| 20     |
| 30     |
| 10     |
| 40     |
+--------+
6 rows in set (0.00 sec)

เป้าหมาย: เรียงจากน้อยไปมาก แต่นำค่า 10 ไปไว้ท้ายสุด

20, 20, 30, 30, 40, 10

คำสั่ง ORDER BY แบบกำหนดเอง

mysql> SELECT * FROM DemoTable ORDER BY Status=10, Status;

ผลลัพธ์

+--------+
| Status |
+--------+
| 20     |
| 20     |
| 30     |
| 30     |
| 40     |
| 10     |
+--------+
6 rows in set (0.00 sec)

คำอธิบาย

  • Status=10 จะคืนค่า 1 (True) สำหรับแถวที่มีค่า 10, และ 0 (False) สำหรับค่าอื่น
  • ORDER BY Status=10 จะจัดกลุ่ม False (0) ก่อน True (1) → ค่า 10 จะอยู่ท้าย
  • , Status เป็นการเรียงลำดับรอง (Secondary Sort) ภายในแต่ละกลุ่ม