Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL: Sử dụng IFNULL trong ORDER BY

Hàm IFNULL(cot1, cot2) trả về cot1 nếu không NULL, ngược lại trả cot2. Có thể dùng trực tiếp trong ORDER BY để sắp xếp theo cột ưu tiên, fallback sang cột khác khi NULL.

Cú pháp

SELECT * FROM ten_bang ORDER BY IFNULL(cot_uu_tien, cot_fallback);

Ví dụ minh họa

Tạo bảng sản phẩm có 2 mức giá (giá sỉ, giá lẻ), một số NULL:

mysql> CREATE TABLE IfNullDemo (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> TenSanPham VARCHAR(10),
    -> GiaSi FLOAT,
    -> GiaLe FLOAT,
    -> PRIMARY KEY(Id)
    -> );

Chèn dữ liệu:

mysql> INSERT INTO IfNullDemo(TenSanPham, GiaSi, GiaLe) VALUES
    -> ('Product-1', 99.50, 150.50),
    -> ('Product-2', NULL,   76.56),
    -> ('Product-3', 105.40, NULL),
    -> ('Product-4', NULL,   NULL),
    -> ('Product-5', 209.90, 400.50);

Dữ liệu gốc:

+----+-------------+---------+---------+
| Id | TenSanPham  | GiaSi   | GiaLe   |
+----+-------------+---------+---------+
| 1  | Product-1   | 99.5    | 150.5   |
| 2  | Product-2   | NULL    | 76.56   |
| 3  | Product-3   | 105.4   | NULL    |
| 4  | Product-4   | NULL    | NULL    |
| 5  | Product-5   | 209.9   | 400.5   |
+----+-------------+---------+---------+

Sắp xếp: ưu tiên GiaSi, nếu NULL thì dùng GiaLe

mysql> SELECT * FROM IfNullDemo ORDER BY IFNULL(GiaSi, GiaLe);

Kết quả (NULL cuối cùng vì IFNULL(NULL,NULL)=NULL, NULL sắp xếp đầu trong ASC):

+----+-------------+---------+---------+
| Id | TenSanPham  | GiaSi   | GiaLe   |
+----+-------------+---------+---------+
| 4  | Product-4   | NULL    | NULL    |
| 2  | Product-2   | NULL    | 76.56   |
| 1  | Product-1   | 99.5    | 150.5   |
| 3  | Product-3   | 105.4   | NULL    |
| 5  | Product-5   | 209.9   | 400.5   |
+----+-------------+---------+---------+

Mẹo: Dùng COALESCE(cot1, cot2, cot3, ...) cho nhiều cột fallback. IFNULL chỉ nhận 2 tham số (MySQL), COALESCE chuẩn ANSI SQL nhận nhiều.