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

เรียงข้อมูล MySQL ให้ค่าที่ไม่ใช่ NULL อยู่หน้า แล้วค่อย NULL ด้วย ISNULL

บทความนี้สาธิตการใช้ ORDER BY ISNULL(column) เพื่อจัดลำดับให้ค่าที่ไม่ใช่ NULL (Non-NULL) อยู่ก่อน เรียงจากน้อยไปมาก แล้วค่อยค่า NULL ทีหลัง

สร้างตารางและข้อมูลทดสอบ (มีค่า NULL)

mysql> CREATE TABLE DemoTable669(
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentScore INT
);
Query OK, 0 rows affected (0.55 sec)

mysql> INSERT INTO DemoTable669(StudentScore) VALUES(45);
mysql> INSERT INTO DemoTable669(StudentScore) VALUES(NULL);
mysql> INSERT INTO DemoTable669(StudentScore) VALUES(89);
mysql> INSERT INTO DemoTable669(StudentScore) VALUES(NULL);

คิวรีเรียง Non-NULL ก่อน แล้วค่อย NULL

mysql> SELECT * FROM DemoTable669 
ORDER BY ISNULL(StudentScore), StudentScore;

ผลลัพธ์

+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
| 1         | 45           |
| 3         | 89           |
| 2         | NULL         |
| 4         | NULL         |
+-----------+--------------+

คำอธิบาย:

  • ISNULL(StudentScore) - คืน 1 ถ้าเป็น NULL, 0 ถ้าไม่ใช่ NULL
  • ORDER BY ISNULL(...), StudentScore - เรียง ISNULL ก่อน (0 ก่อน 1 = Non-NULL ก่อน) แล้วค่อยเรียงค่าจริง
  • เทียบเท่า: ORDER BY (StudentScore IS NULL), StudentScore

ประโยชน์: ใช้สำหรับรายงานที่ต้องการแสดงข้อมูลที่มีค่าก่อน แล้วค่อยข้อมูลที่ขาดหายไปทีหลัง