Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Manipulando Null na função Greatest no Oracle


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),
    ...
)