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

วิธีจัดเรียงข้อมูลด้วย ORDER BY แบบกำหนดค่าเฉพาะก่อนใน MySQL

การจัดเรียงให้ค่าเฉพาะอยู่บนสุดด้วย 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()