บทความนี้สาธิตการจัดลำดับข้อมูลแบบกำหนดเอง (Custom Ordering) โดยใช้ CASE WHEN ... IN (...) THEN ... ELSE ... END ใน ORDER BY เพื่อให้กลุ่ม Id (1,2,3) อยู่ก่อน แล้วค่อยอื่นๆ เรียงตาม Name
สร้างตารางและข้อมูลทดสอบ
mysql> CREATE TABLE DemoTable752(
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(100)
);
Query OK, 0 rows affected (0.63 sec)
mysql> INSERT INTO DemoTable752(Name) VALUES('John'), ('Carol'), ('Bob'), ('Mike'), ('Sam'), ('Adam'), ('Chris');
คิวรี ORDER BY CASE WHEN IN
mysql> SELECT * FROM DemoTable752
ORDER BY CASE WHEN Id IN (1,2,3) THEN 1 ELSE Id END, Name;
ผลลัพธ์ (Id 1,2,3 อยู่บนสุด เรียงตาม Name: Bob, Carol, John แล้วค่อย Id 4,5,6,7)
+----+-------+
| Id | Name |
+----+-------+
| 3 | Bob |
| 2 | Carol |
| 1 | John |
| 4 | Mike |
| 5 | Sam |
| 6 | Adam |
| 7 | Chris |
+----+-------+
คำอธิบาย:
CASE WHEN Id IN (1,2,3) THEN 1 ELSE Id END- กลุ่ม Id 1,2,3 ให้ค่า Sort Key = 1 (เหมือนกันทั้ง 3) อื่นๆ ใช้ Id จริง- กลุ่มที่มี Sort Key = 1 จะอยู่บนสุด (เพราะ 1 < 4,5,6,7)
- ภายในกลุ่ม Sort Key เดียวกัน เรียงตาม
Name(Bob, Carol, John) - Id 4,5,6,7 เรียงตาม Id ตามปกติ (เพราะ ELSE Id)
ประโยชน์: ใช้สำหรับ Priority Ordering, Featured Items First, Custom Business Logic Sorting