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

การใช้ ORDER BY กับ CASE WHEN ใน MySQL เพื่อจัดลำดับแบบกำหนดเอง

การจัดลำดับข้อมูลแบบกำหนดเองด้วย ORDER BY CASE WHEN

เมื่อต้องการจัดลำดับข้อมูลไม่ใช่ตามตัวอักษรหรือตัวเลขตามปกติ ให้ใช้ ORDER BY CASE WHEN เพื่อกำหนดลำดับความสำคัญของแต่ละค่าเอง

รูปแบบคำสั่ง

SELECT * FROM table_name 
ORDER BY CASE column_name 
    WHEN value1 THEN priority1 
    WHEN value2 THEN priority2 
    ELSE default_priority 
END;

ตัวอย่าง: จัดลำดับสีตามความสำคัญที่กำหนดเอง

1. สร้างตารางและเพิ่มข้อมูล

CREATE TABLE DemoTable (
    Color VARCHAR(100)
);

INSERT INTO DemoTable VALUES ('Red');
INSERT INTO DemoTable VALUES ('Green');
INSERT INTO DemoTable VALUES ('Blue');
INSERT INTO DemoTable VALUES ('Yellow');

2. ดูข้อมูลก่อนจัดลำดับ

SELECT * FROM DemoTable;

ผลลัพธ์:

+--------+
| Color  |
+--------+
| Red    |
| Green  |
| Blue   |
| Yellow |
+--------+

3. จัดลำดับ: Blue ก่อน, ตามด้วย Green, Yellow, สุดท้ายคือ Red

SELECT * FROM DemoTable 
ORDER BY CASE Color 
    WHEN 'Blue' THEN 10 
    WHEN 'Green' THEN 20 
    WHEN 'Yellow' THEN 30 
    ELSE 100 
END;

ผลลัพธ์:

+--------+
| Color  |
+--------+
| Blue   |
| Green  |
| Yellow |
| Red    |
+--------+

การทำงานของ CASE WHEN ใน ORDER BY

  • MySQL จะคำนวณค่า CASE สำหรับแต่ละแถว
  • ค่าที่ได้ (10, 20, 30, 100) ถูกใช้เป็นคีย์จัดลำดับ
  • ค่าที่น้อยกว่าจะอยู่หน้ากว่า (ASC - เริ่มต้น)
  • ค่าที่ไม่ตรงเงื่อนไขจะใช้ค่า ELSE (100 = อยู่ท้ายสุด)

รูปแบบ CASE แบบ Search (เปรียบเทียบเงื่อนไขซับซ้อน)

ORDER BY CASE 
    WHEN Score >= 90 THEN 1 
    WHEN Score >= 70 THEN 2 
    WHEN Score >= 50 THEN 3 
    ELSE 4 
END

การจัดลำดับหลายระดับ (Multi-level Sorting)

SELECT * FROM DemoTable 
ORDER BY 
    CASE Color WHEN 'Blue' THEN 1 WHEN 'Green' THEN 2 ELSE 3 END,
    Color ASC;  -- จัดลำดับอักษรภายในกลุ่มเดียวกัน

กรณีใช้งานจริง

  • จัดลำดับสถานะ: 'Urgent' > 'High' > 'Normal' > 'Low'
  • จัดลำดับประเภทสินค้า: 'Featured' > 'New' > 'Sale' > 'Regular'
  • จัดลำดับวันในสัปดาห์: Monday=1, Tuesday=2, ..., Sunday=7

หมายเหตุเกี่ยวกับตัวอย่างต้นฉบับ

โค้ดต้นฉบับมีข้อผิดพลาด: create table DemoTable order by with vas Color varchar(100) ควรเป็น CREATE TABLE DemoTable (Color VARCHAR(100)) แก้ไขแล้วในตัวอย่างข้างต้น