ไวยากรณ์พื้นฐาน
การเรียงลำดับหลายคอลัมน์ทำได้โดยระบุคอลัมน์ตามลำดับความสำคัญ คั่นด้วยเครื่องหมายจุลภาค:
SELECT * FROM yourTable ORDER BY column1 DESC, column2 ASC, column3;
ตัวอย่าง: สร้างตารางและเพิ่มข้อมูล
CREATE TABLE demo29 (
value1 INT,
value2 INT
);
INSERT INTO demo29 VALUES
(10, 500), (14, 400), (9, 500),
(13, 400), (45, 500), (11, 400);
ข้อมูลก่อนเรียงลำดับ
+--------+--------+ | value1 | value2 | +--------+--------+ | 10 | 500 | | 14 | 400 | | 9 | 500 | | 13 | 400 | | 45 | 500 | | 11 | 400 | +--------+--------+
คำสั่ง ORDER BY หลายคอลัมน์
SELECT * FROM demo29 ORDER BY value2 DESC, value1 ASC;
ผลลัพธ์: เรียง value2 มากไปน้อย แล้วค่อย value1 น้อยไปมาก
+--------+--------+ | value1 | value2 | +--------+--------+ | 9 | 500 | | 10 | 500 | | 45 | 500 | | 11 | 400 | | 13 | 400 | | 14 | 400 | +--------+--------+
จุดสำคัญ
- คอลัมน์แรก (
value2 DESC) เป็นเกณฑ์หลัก — เรียงจากค่ามากไปน้อย - คอลัมน์ที่สอง (
value1 ASC) เป็นเกณฑ์รอง — ใช้เรียงเฉพาะแถวที่ value2 เท่ากัน - ค่าเริ่มต้นของ ORDER BY คือ ASC (น้อยไปมาก) สามารถระบุ ASC/DESC ได้ชัดเจน
- รองรับการเรียงหลายคอลัมน์ได้ไม่จำกัด (ในขอบเขตความยาวคำสั่ง SQL)
กรณีที่พบปัญหา "ไม่ทำงานตามที่คาด"
หากผลลัพธ์ไม่ตรงตามที่คาด ตรวจสอบ:
- ชนิดข้อมูลของคอลัมน์ (ตัวเลข vs ข้อความ เรียงต่างกัน)
- ค่า NULL — จะถูกวางไว้ก่อน (ASC) หรือหลัง (DESC) ตามการตั้งค่า
- Collation ของคอลัมน์ข้อความ ส่งผลต่อลำดับตัวอักษร