Câu hỏi của bạn đặc biệt liên quan đến hai cột, nhưng tôi đã gặp phải những tình huống mà tôi cần GREATEST
/ LEAST
trong số hơn hai cột. Trong những trường hợp đó, bạn có thể sử dụng COALESCE
và mở rộng giải pháp lên bao nhiêu cột bạn muốn.
Đây là một ví dụ với ba cột a
, b
và c
:
GREATEST(
COALESCE(a, b, c),
COALESCE(b, c, a),
COALESCE(c, a, b)
)
Lưu ý rằng thứ tự cột của COALESCE
thay đổi để mỗi cột đầu vào là phần tử đầu tiên COALESCE
ít nhất một lần. Lần duy nhất điều này sẽ trả về NULL là khi tất cả các cột đầu vào là NULL.
Trong "giải pháp chung", số COALESCE
các câu lệnh sẽ bằng số cột đầu vào:
GREATEST(
COALESCE(col1, col2, col3, col4, ....),
COALESCE(col2, col3, col4, ...., col1),
COALESCE(col3, col4, ...., col1, col2),
COALESCE(col4, ...., col1, col2, col3),
COALESCE(...., col1, col2, col3, col4),
...
)