Jak uzyskać maksymalnie dwie wartości w MySQL?

290

Próbowałem, ale nie udało mi się:

mysql> select max(1,0);
BŁĄD 1064 (42000): Wystąpił błąd w składni SQL; sprawdź instrukcję
która odpowiada wersji serwera MySQL, aby można było użyć właściwej składni 
w pobliżu „0)” w linii 1
Maska
źródło

Odpowiedzi:

528

Użyj WIELKIEGO ()

Na przykład:

SELECT GREATEST(2,1);

Uwaga: Ilekroć jakakolwiek pojedyncza wartość zawiera w tym czasie wartość null, funkcja ta zawsze zwraca null (Podziękowania dla użytkownika @ sanghavi7)

NinethSense
źródło
41
należy pamiętać, że jeśli jakakolwiek pojedyncza wartość zawiera w tym czasie wartość null, funkcja zawsze zwraca wartość null jako odpowiedź!
sanghavi7
33
Jest teżLEAST
bobobobo
1
jak uruchomić kwerendę podrzędną jako parametr, aby GREATESTuzyskać wartości dla kolumny cirtain
Junaid Qadir
17
Aby zapobiec problemowi z wartością null, możesz użyć ifnull. Np. select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;Dostaniesz date1.
Christoph Grimmer-Dietrich,
1
Jeśli niektóre wartości mogą być zerowe, możesz to zrobićGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
27

Aby uzyskać maksymalną wartość kolumny w zestawie wierszy:

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

Aby uzyskać maksymalną wartość zestawu kolumn, literałów lub zmiennych dla każdego wiersza:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results
cs_alumnus
źródło
3
Uważaj na wartości null za pomocą GREATEST. Każda wartość null spowoduje, że funkcja zwróci null. Aby temu zapobiec, możesz to zrobićGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
5

Możesz użyć WIELKIEJ funkcji z polami, które nie mają wartości zerowych. Jeśli jedna z tych wartości (lub obie) może mieć wartość NULL, nie należy jej używać (wynik może mieć wartość NULL).

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

Możesz zmienić NULL na preferowaną wartość domyślną (jeśli obie wartości to NULL).

Leonid Zacharow
źródło
1
Właśnie dlatego szczerze nienawidzę MySQL. Cóż za ogrom pracy, aby wykonać tak prostą rzecz.
Monica Heddneck,
9
Można to po prostu zastąpić select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. To jest zbyt skomplikowane
Kyborek
1
Jeśli niektóre wartości mogą być zerowe, możesz to zrobićGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean