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

วิธีเรียงลำดับข้อมูลใน MySQL ให้ค่าว่าง (Empty/NULL) อยู่ท้ายสุด

การใช้ ORDER BY กับ IF() เพื่อจัดการค่าว่าง

สร้างคอลัมน์คำนวณชั่วคราว: ค่าว่าง/NULL = 1, ค่าปกติ = 0 แล้วเรียงตามคอลัมน์นี้ก่อน

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

SELECT * FROM yourTableName
ORDER BY IF(yourColumnName = '' OR yourColumnName IS NULL, 1, 0), yourColumnName;

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

mysql> CREATE TABLE emptyCellsAtEnd (
    -> ProductId VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.65 sec)

mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-1');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-2');
mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-3');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-4');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-9');
mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-8');

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

mysql> SELECT * FROM emptyCellsAtEnd;
+-----------+
| ProductId |
+-----------+
|           |
| P-1       |
| P-2       |
|           |
| P-3       |
| P-4       |
| P-9       |
|           |
| P-8       |
+-----------+
9 rows in set (0.00 sec)

คำสั่งเรียง ให้ค่าว่าง/NULL อยู่ท้าย

mysql> SELECT * FROM emptyCellsAtEnd
    -> ORDER BY IF(ProductId = '' OR ProductId IS NULL, 1, 0), ProductId;
+-----------+
| ProductId |
+-----------+
| P-1       |
| P-2       |
| P-3       |
| P-4       |
| P-8       |
| P-9       |
|           |
|           |
|           |
+-----------+
9 rows in set (0.00 sec)

วิธีอื่นที่เทียบเท่า:

-- ใช้ CASE
ORDER BY CASE WHEN ProductId = '' OR ProductId IS NULL THEN 1 ELSE 0 END, ProductId

-- ใช้ COALESCE (NULL ก่อน แล้วค่าว่าง)
ORDER BY COALESCE(NULLIF(ProductId, ''), '~'), ProductId

-- MySQL 8.0+ ใช้ NULLS LAST (สำหรับ NULL จริง ไม่รวม empty string)
ORDER BY ProductId NULLS LAST

สรุป: ใช้ IF/CASE สร้าง priority column แล้ว ORDER BY 2 ระดับ