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

วิธีจัดเรียงลำดับคอลัมน์ตัวเลขแบบ ASC ใน MySQL

การใช้ CAST() เพื่อจัดเรียงตัวเลขที่เก็บเป็นข้อความ

เมื่อคอลัมน์ตัวเลขถูกเก็บเป็นชนิดข้อมูลข้อความ (VARCHAR/TEXT) การจัดเรียงด้วย ORDER BY แบบปกติจะใช้การเปรียบเทียบแบบสตริง ทำให้ได้ลำดับผิดพลาด (เช่น 100 จะอยู่ก่อน 11) แก้ไขได้โดยใช้ CAST() แปลงเป็นตัวเลขก่อนจัดเรียง

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Score INT
);

เพิ่มข้อมูล:

INSERT INTO DemoTable (Score) VALUES 
(10), (100), (11), (97), (78), (89);

ข้อมูลก่อนจัดเรียง

+----+-------+
| Id | Score |
+----+-------+
| 1  | 10    |
| 2  | 100   |
| 3  | 11    |
| 4  | 97    |
| 5  | 78    |
| 6  | 89    |
+----+-------+

คำสั่งจัดเรียง ASC ด้วย CAST()

SELECT * FROM DemoTable 
ORDER BY CAST(Score AS SIGNED INTEGER) ASC;

ผลลัพธ์หลังจัดเรียงถูกต้อง

+----+-------+
| Id | Score |
+----+-------+
| 1  | 10    |
| 3  | 11    |
| 5  | 78    |
| 6  | 89    |
| 4  | 97    |
| 2  | 100   |
+----+-------+

คำอธิบาย: CAST(Score AS SIGNED INTEGER) แปลงค่าในคอลัมน์ Score ให้เป็นจำนวนเต็มที่มีเครื่องหมาย ก่อนนำไปจัดเรียง ทำให้ได้ลำดับตัวเลขที่ถูกต้องตามค่าตัวเลขจริง ไม่ใช่ลำดับตัวอักษร

เคล็ดลับ: หากคอลัมน์เป็นชนิดตัวเลขอยู่แล้ว (INT, DECIMAL, FLOAT) ไม่ต้องใช้ CAST() เพราะ MySQL จะจัดเรียงตามค่าตัวเลขโดยอัตโนมัติ