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

Tìm giá trị lớn nhất giữa 2 cột có chứa NULL với GREATEST và IF trong MySQL

Giới thiệu

Hàm GREATEST() trả về giá trị lớn nhất trong danh sách, nhưng trả về NULL nếu bất kỳ tham số nào là NULL. Cần dùng IF() hoặc COALESCE() để xử lý NULL trước.

1. Tạo bảng và dữ liệu

mysql> create table DemoTable (
    -> Value1 int,
    -> Value2 int
    -> ); 
Query OK, 0 rows affected (0.77 sec)

mysql> insert into DemoTable values(78,89); 
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(19,null); 
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(null,0); 
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values(null,95); 
Query OK, 1 row affected (0.15 sec)

2. Dữ liệu gốc

mysql> select *from DemoTable;
+--------+--------+
| Value1 | Value2 |
+--------+--------+
|     78 |     89 |
|     19 |   NULL |
|   NULL |      0 |
|   NULL |     95 |
+--------+--------+
4 rows in set (0.00 sec)

3. Tìm max xử lý NULL

mysql> select greatest(
    ->     if(Value1 is null, 0, Value1),
    ->     if(Value2 is null, 0, Value2)
    -> ) from DemoTable;

Logic: IF(col IS NULL, 0, col) thay NULL bằng 0, sau đó GREATEST so sánh.

4. Kết quả

+-------------------------------------------------------------------+
| greatest(if(Value1 is null,0,Value1),if(Value2 is null,0,Value2)) |
+-------------------------------------------------------------------+
|                                                                89 |
|                                                                19 |
|                                                                 0 |
|                                                                95 |
+-------------------------------------------------------------------+
4 rows in set (0.00 sec)

Cách viết gọn hơn:

SELECT GREATEST(COALESCE(Value1, 0), COALESCE(Value2, 0)) FROM DemoTable;
-- hoặc
SELECT GREATEST(IFNULL(Value1, 0), IFNULL(Value2, 0)) FROM DemoTable;

Lưu ý: GREATEST/LEAST trả về NULL nếu bất kỳ tham số NULL. COALESCE/IFNULL chuyển NULL thành giá trị mặc định. Khác với MAX() (hàm tập hợp) bỏ qua NULL.