Giới thiệu
Hàm GREATEST(val1, val2, ...) trả về giá trị lớn nhất trong danh sách. Dùng trong ORDER BY GREATEST(col1, col2) DESC để sắp xếp hàng theo giá trị lớn hơn của 2 cột.
Ví dụ thực hành
1. Tạo bảng DemoTable834
mysql> CREATE TABLE DemoTable834 (Value1 INT, Value2 INT);
2. Chèn dữ liệu
mysql> INSERT INTO DemoTable834 VALUES (10,20),(40,50),(20,24),(30,10);
3. Sắp xếp theo MAX(Value1, Value2) giảm dần
mysql> SELECT * FROM DemoTable834 ORDER BY GREATEST(Value1, Value2) DESC;
4. Kết quả
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 40 | 50 | -- GREATEST=50
| 30 | 10 | -- GREATEST=30
| 20 | 24 | -- GREATEST=24
| 10 | 20 | -- GREATEST=20
+--------+--------+
Hàm đối偶: LEAST()
-- Sắp xếp theo giá trị NHỎ NHẤT của 2 cột
SELECT * FROM DemoTable834 ORDER BY LEAST(Value1, Value2) DESC;
Lưu ý về NULL
GREATEST(10, NULL)=NULL.- Nếu cột có thể NULL:
GREATEST(COALESCE(Value1,0), COALESCE(Value2,0)).
Mở rộng: Sắp xếp theo tổng / hiệu / tích
ORDER BY (Value1 + Value2) DESC; -- Tổng
ORDER BY (Value1 - Value2) DESC; -- Hiệu
ORDER BY (Value1 * Value2) DESC; -- Tích
Hiệu suất
GREATESTkhông dùng index trên (Value1, Value2).- Nếu truy vấn thường xuyên: tạo generated column
greatest_val = GREATEST(Value1, Value2)+ index. - Hoặc materialized view / summary table.