Sử dụng COALESCE(col1, col2) trong ORDER BY để lấy giá trị đầu tiên không NULL từ hai cột, sắp xếp theo giá trị đó.
Tạo bảng và dữ liệu có NULL
mysql> CREATE TABLE DemoTable (FirstName VARCHAR(100), LastName VARCHAR(100)); Query OK, 0 rows affected (1.39 sec)
mysql> INSERT INTO DemoTable VALUES('Sam', 'Brown'), (NULL, 'Smith'), ('David', 'Taylor'), ('Mike', NULL);
Query OK, 4 rows affected (0.25 sec)
Truy vấn ORDER BY COALESCE
mysql> SELECT * FROM DemoTable ORDER BY COALESCE(FirstName, LastName);
Kết quả (sắp xếp theo FirstName, nếu NULL thì lấy LastName):
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | David | Taylor | | Mike | NULL | | Sam | Brown | | NULL | Smith | +-----------+----------+ 4 rows in set (0.04 sec)
Giải thích:
- David (FirstName='David') → sort key 'David'
- Mike (FirstName='Mike') → sort key 'Mike'
- Sam (FirstName='Sam') → sort key 'Sam'
- NULL/ Smith (FirstName=NULL) → COALESCE lấy 'Smith' → sort key 'Smith'
Sắp xếp NULL cuối: ORDER BY (FirstName IS NULL), FirstName hoặc ORDER BY COALESCE(FirstName, 'zzzzzzzz').