Oracle
 sql >> Base de données >  >> RDS >> Oracle

Gestion de Null dans la plus grande fonction d'Oracle

Votre question implique spécifiquement deux colonnes, mais j'ai rencontré des situations où j'avais besoin de GREATEST /LEAST de plus de deux colonnes. Dans ces scénarios, vous pouvez utiliser COALESCE et étendez la solution à autant de colonnes que vous le souhaitez.

Voici un exemple avec trois colonnes a , b , et c :

GREATEST(
    COALESCE(a, b, c),
    COALESCE(b, c, a),
    COALESCE(c, a, b)
)

Notez que l'ordre des colonnes de COALESCE change pour que chaque colonne d'entrée soit le premier élément COALESCE au moins une fois. La seule fois où cela renverra NULL est lorsque toutes les colonnes d'entrée sont NULL.

Dans la "solution générale" le nombre de COALESCE seront égaux au nombre de colonnes d'entrée :

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