Oracle
 sql >> Database >  >> RDS >> Oracle

Gestione di Null nella funzione Greatest in Oracle

La tua domanda riguarda specificamente due colonne, ma mi sono imbattuto in situazioni in cui avevo bisogno di GREATEST /LEAST di più di due colonne. In questi scenari puoi usare COALESCE ed espandi la soluzione a tutte le colonne che desideri.

Ecco un esempio con tre colonne a , b e c :

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

Nota che l'ordinamento delle colonne di COALESCE cambia in modo che ogni colonna di input sia il primo elemento COALESCE almeno una volta. L'unica volta che restituirà NULL è quando tutte le colonne di input sono NULL.

Nella "soluzione generale" il numero di COALESCE le istruzioni saranno uguali al numero di colonne di input:

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