Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Umgang mit Null in der Greatest-Funktion in Oracle

Ihre Frage umfasst speziell zwei Spalten, aber ich bin auf Situationen gestoßen, in denen ich GREATEST benötigte /LEAST aus mehr als zwei Spalten. In diesen Szenarien können Sie COALESCE verwenden und erweitern Sie die Lösung auf beliebig viele Spalten.

Hier ist ein Beispiel mit drei Spalten a , b , und c :

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

Beachten Sie, dass die Spaltenreihenfolge von COALESCE ändert sich so, dass jede Eingabespalte das erste Element COALESCE ist zumindest einmal. NULL wird nur zurückgegeben, wenn alle Eingabespalten NULL sind.

In der "allgemeinen Lösung" die Anzahl der COALESCE Anweisungen entsprechen der Anzahl der Eingabespalten:

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