Wie bekomme ich das Maximum von zwei Werten in MySQL?

289

Ich habe es versucht, bin aber gescheitert:

mysql> select max(1,0);
FEHLER 1064 (42000): In Ihrer SQL-Syntax ist ein Fehler aufgetreten. Überprüfen Sie das Handbuch
Dies entspricht Ihrer MySQL-Serverversion für die richtige Syntax 
in der Nähe von '0)' in Zeile 1
Maske
quelle

Antworten:

527

Verwende GREATEST ()

Z.B:

SELECT GREATEST(2,1);

Hinweis: Wenn zu diesem Zeitpunkt ein einzelner Wert null enthält, gibt diese Funktion immer null zurück (Dank an user @ sanghavi7).

NinethSense
quelle
41
Eine Sache muss beachtet werden, dass diese Funktion immer null als Antwort zurückgibt, wenn ein einzelner Wert zu diesem Zeitpunkt null enthält!
Sanghavi7
33
Es gibt auchLEAST
Bobobobo
1
Wie kann ich GREATESTeine Unterabfrage als Parameter ausführen, damit ich Werte für eine Cirtain-Spalte erhalten kann
Junaid Qadir
17
Um das Problem mit null zu vermeiden, können Sie ifnull verwenden. ZB select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;bekommst du Datum1.
Christoph Grimmer-Dietrich
1
Wenn einige Werte null sein können, können Sie tunGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
27

So ermitteln Sie den Maximalwert einer Spalte für mehrere Zeilen:

SELECT MAX(column1) FROM table; -- expect one result

So ermitteln Sie den Maximalwert einer Reihe von Spalten, Literalen oder Variablen für jede Zeile:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results
cs_alumnus
quelle
3
Achten Sie auf Nullwerte mit GREATEST. Jeder Nullwert bewirkt, dass die Funktion null zurückgibt. Um dies zu verhindern, können Sie tunGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
5

Sie können die GREATEST- Funktion mit nicht nullbaren Feldern verwenden. Wenn einer dieser Werte (oder beide) NULL sein kann, verwenden Sie ihn nicht (Ergebnis kann NULL sein).

select 
    if(
        fieldA is NULL, 
        if(fieldB is NULL, NULL, fieldB), /* second NULL is default value */
        if(fieldB is NULL, field A, GREATEST(fieldA, fieldB))
    ) as maxValue

Sie können NULL auf Ihren bevorzugten Standardwert ändern (wenn beide Werte NULL sind).

Leonid Zakharov
quelle
1
Deshalb hasse ich MySQL ehrlich. Was für eine enorme Menge an Arbeit, um so eine einfache Sache zu erledigen.
Monica Heddneck
9
Dies kann einfach durch ersetzt werden select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. Es ist überkompliziert
Kyborek
1
Wenn einige Werte null sein können, können Sie tunGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean