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

จัดลำดับให้ค่าเฉพาะอยู่หน้าสุดด้วย ORDER BY ใน MySQL

บทนำ

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

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

mysql> CREATE TABLE DemoTable (
    -> Number INT
    -> );
Query OK, 0 rows affected (0.57 sec)
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(12);
mysql> INSERT INTO DemoTable VALUES(14);
mysql> INSERT INTO DemoTable VALUES(19);
mysql> INSERT INTO DemoTable VALUES(45);
mysql> INSERT INTO DemoTable VALUES(56);
mysql> INSERT INTO DemoTable VALUES(103);
mysql> INSERT INTO DemoTable VALUES(87);
mysql> INSERT INTO DemoTable VALUES(98);

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

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+--------+
| Number |
+--------+
| 10     |
| 20     |
| 12     |
| 14     |
| 19     |
| 45     |
| 56     |
| 103    |
| 87     |
| 98     |
+--------+
10 rows in set (0.00 sec)

คำสั่งจัดให้ค่า 45 อยู่หน้าสุด แล้วค่อยเรียงค่าอื่นจากน้อยไปมาก

mysql> SELECT * FROM DemoTable
    -> ORDER BY (Number = 45) DESC, Number;

ผลลัพธ์

+--------+
| Number |
+--------+
| 45     |
| 10     |
| 12     |
| 14     |
| 19     |
| 20     |
| 56     |
| 87     |
| 98     |
| 103    |
+--------+
10 rows in set (0.00 sec)

คำอธิบาย

  • (Number = 45) คืนค่า 1 (True) สำหรับแถวที่มีค่า 45, 0 (False) สำหรับอื่นๆ
  • DESC เรียง 1 (True) ก่อน 0 (False) → ค่า 45 อยู่บนสุด
  • , Number เรียงค่าอื่นๆ จากน้อยไปมาก (ASC เป็นค่า Default)

การประยุกต์: จัดหลายค่าเป็นลำดับพิเศษ

-- ใช้ FIELD() สำหรับหลายค่า
ORDER BY FIELD(Number, 45, 10, 100) DESC, Number

-- FIELD คืนค่าลำดับที่เจอ (1-based) หรือ 0 หากไม่เจอ
-- ค่า 45 → 1, ค่า 10 → 2, ค่า 100 → 3, อื่นๆ → 0
-- DESC จะทำให้ 3, 2, 1, 0 → 100, 10, 45, อื่นๆ

กรณีอยากให้ค่าเฉพาะอยู่ท้ายสุด

ORDER BY (Number = 45) ASC, Number
-- หรือ
ORDER BY (Number <> 45) DESC, Number