Sua pergunta envolve especificamente duas colunas, mas me deparei com situações em que precisava de
GREATEST
/LEAST
de mais de duas colunas. Nesses cenários, você pode usar COALESCE
e expanda a solução para quantas colunas desejar. Aqui está um exemplo com três colunas
a
, b
e c
:GREATEST(
COALESCE(a, b, c),
COALESCE(b, c, a),
COALESCE(c, a, b)
)
Observe que a ordenação das colunas do
COALESCE
muda para que cada coluna de entrada seja o primeiro elemento COALESCE
pelo menos uma vez. A única vez que isso retornará NULL é quando todas as colunas de entrada forem NULL. Na "solução geral" o número de
COALESCE
serão iguais ao número de colunas de entrada: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),
...
)