ใช้ ORDER BY CASE WHEN ... THEN 0 ELSE 1 END เพื่อจัดให้ค่าที่ต้องการอยู่บนสุด
ตัวอย่าง: เรียงให้ชื่อขึ้นต้นด้วย "Jo" อยู่บนสุด
1. สร้างตารางและข้อมูล
mysql> create table DemoTable (FirstName varchar(100));
mysql> insert into DemoTable values('John'), ('Adam'), ('Sam'), ('Johnny'), ('Joy'), ('Jace');
2. Query เรียง Custom
mysql> SELECT * FROM DemoTable
-> ORDER BY CASE WHEN SUBSTRING(FirstName, 1, 2) = 'Jo' THEN 0 ELSE 1 END;
ผลลัพธ์
+-----------+ | FirstName | +-----------+ | John | | Johnny | | Joy | | Adam | | Sam | | Jace | +-----------+
รูปแบบ ORDER BY CASE อื่นๆ
หลายระดับความสำคัญ
ORDER BY CASE
WHEN FirstName LIKE 'Jo%' THEN 1
WHEN FirstName LIKE 'Ja%' THEN 2
WHEN FirstName LIKE 'A%' THEN 3
ELSE 4
END;
ใช้ FIELD() สำหรับรายการคงที่ (MySQL)
ORDER BY FIELD(FirstName, 'John', 'Johnny', 'Joy', 'Adam', 'Sam', 'Jace');
MySQL 8.0: ใช้ CTE กำหนดลำดับ
WITH ordered AS (
SELECT *,
CASE WHEN FirstName LIKE 'Jo%' THEN 1 ELSE 2 END AS sort_order
FROM DemoTable
)
SELECT * FROM ordered ORDER BY sort_order, FirstName;