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

ORDER BY หลายคอลัมน์ใน MySQL: ไวยากรณ์และตัวอย่าง

ไวยากรณ์พื้นฐาน

การเรียงลำดับหลายคอลัมน์ทำได้โดยระบุคอลัมน์ตามลำดับความสำคัญ คั่นด้วยเครื่องหมายจุลภาค:

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)

กรณีที่พบปัญหา "ไม่ทำงานตามที่คาด"

หากผลลัพธ์ไม่ตรงตามที่คาด ตรวจสอบ:

  1. ชนิดข้อมูลของคอลัมน์ (ตัวเลข vs ข้อความ เรียงต่างกัน)
  2. ค่า NULL — จะถูกวางไว้ก่อน (ASC) หรือหลัง (DESC) ตามการตั้งค่า
  3. Collation ของคอลัมน์ข้อความ ส่งผลต่อลำดับตัวอักษร