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

MySQL ORDER BY แบบกำหนดเองด้วย CASE WHEN ... IN

บทความนี้สาธิตการจัดลำดับข้อมูลแบบกำหนดเอง (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