Oracle: select Maximalwert aus unterschiedlichen Spalten der gleichen Reihe
-
05-10-2019 - |
Frage
Die ganze Frage ist so ziemlich im Titel. Für jede Zeile der Tabelle würde Ich mag das Maximum einer Teilmenge von Spalten auswählen.
Zum Beispiel aus dieser Tabelle
name m1 m2 m3 m4
A 1 2 3 4
B 6 3 4 5
C 1 5 2 1
das Ergebnis wäre
name max
A 4
B 6
C 5
Die Abfrage muss kompatibel Oracle 8i sein.
Lösung
Vor diesen Testdaten ...
SQL> select *
2 from your_table
3 /
NAME M1 M2 M3 M4
---- ---------- ---------- ---------- ----------
A 1 2 3 4
B 6 3 4 5
C 1 5 2 1
SQL>
... ein einfacher GREATEST () Aufruf wird das gewünschte Ergebnis:
SQL> select name
2 , greatest(m1,m2,m3,m4)
3 from your_table
4 /
NAME GREATEST(M1,M2,M3,M4)
---- ---------------------
A 4
B 6
C 5
SQL>
Andere Tipps
Mit GREATEST
aber handhaben auch möglich NULL
des
SELECT name, GREATEST(NVL(m1,0), NVL(m2,0), NVL(m3,0), NVL(m4,0)) AS "Max"
FROM yourtable
Input:
name m1 m2 m3 m4
A 1 2 3 4
B 6 3 4 5
C 1 5 2 1
Ausgabe:
NAME Max
A 4
B 6
C 5
SQL Fiddle: http://sqlfiddle.com/#!4/ae268/7 / 0
Input:
name m1 m2 m3 m4
A 1 2 3 null
B 6 null 4 5
C 1 5 2 1
Ausgabe:
NAME Max
A 3
B 6
C 5
SQL Fiddle: http://sqlfiddle.com/#!4/b1c46/1 / 0
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow