การจัดเรียงให้ค่าเฉพาะอยู่บนสุดด้วย Boolean Expression ใน ORDER BY
ใช้นิพจน์ Boolean StudentId = 70 ใน ORDER BY ซึ่งจะคืนค่า 1 (TRUE) หรือ 0 (FALSE) เรียง DESC จะทำให้ค่าที่ TRUE (ค่า 70) อยู่บนสุด ตามด้วยค่าอื่นๆ เรียง ASC
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (StudentId INT); INSERT INTO DemoTable VALUES (100), (60), (70), (45), (55), (78);
ข้อมูลก่อนจัดเรียง
+-----------+ | StudentId | +-----------+ | 100 | | 60 | | 70 | | 45 | | 55 | | 78 | +-----------+
คำสั่งจัดเรียง: 70 ก่อน แล้วค่าอื่น ASC
SELECT * FROM DemoTable ORDER BY StudentId = 70 DESC, StudentId ASC;
ผลลัพธ์
+-----------+ | StudentId | +-----------+ | 70 | | 45 | | 55 | | 60 | | 78 | | 100 | +-----------+
คำอธิบาย:
StudentId = 70คืนค่า 1 (TRUE) สำหรับแถวที่เป็น 70, คืนค่า 0 (FALSE) สำหรับอื่นๆDESCเรียง 1 ก่อน 0 → แถวที่เป็น 70 อยู่บนสุดStudentId ASCจัดเรียงรองสำหรับแถวที่เหลือ (ค่า 0 ทั้งหมด) จากน้อยไปมาก
ประยุกต์ใช้หลายค่า: ใช้ FIELD()
-- ให้ 70, 60, 45 อยู่บนสุดตามลำดับนี้ แล้วค่าอื่น ASC ORDER BY FIELD(StudentId, 70, 60, 45) DESC, StudentId ASC;
FIELD() คืนค่า: ตำแหน่งของค่าในลิสต์ (1-based) หรือ 0 ถ้าไม่เจอ เรียง DESC จะทำให้ค่าที่เจอ (1,2,3...) อยู่บนสุดตามลำดับใน FIELD()