Największa wartość z dwóch lub więcej pól

84

Muszę uzyskać największą wartość z dwóch pól:

SELECT MAX(field1), MAX(field2)

Jak mogę uzyskać największą wartość z tych dwóch?

Qiao
źródło
8
GREATEST()dla największego podobnie LEAST()dla najmniejszego.
James Oravec

Odpowiedzi:

170

Możesz użyć GREATEST()funkcji:

SELECT GREATEST(field1, field2);

Jeśli chcesz uzyskać absolutne maksimum ze wszystkich wierszy, możesz użyć następujących elementów:

SELECT GREATEST(MAX(field1), MAX(field2));

Przykład 1:

SELECT GREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
|              2 |
+----------------+
1 row in set (0.00 sec)

Przykład 2:

CREATE TABLE a (a int, b int);

INSERT INTO a VALUES (1, 1);
INSERT INTO a VALUES (2, 1);
INSERT INTO a VALUES (3, 1);
INSERT INTO a VALUES (1, 2);
INSERT INTO a VALUES (1, 4);

SELECT GREATEST(MAX(a), MAX(b)) FROM a;
+--------------------------+
| GREATEST(MAX(a), MAX(b)) |
+--------------------------+
|                        4 |
+--------------------------+
1 row in set (0.02 sec)
Daniel Vassallo
źródło
nie wiem dlaczego, ale tylko GREATEST(MAX(field1), MAX(field2))działa. W przeciwnym razie zwracany jest zły numer (nie największy)
Qiao
1
@Qiao: Tak, musiałbyś SELECT GREATEST(MAX(field1), MAX(field2));uzyskać absolutne maksimum ze wszystkich wierszy. Jeśli użyjesz SELECT GREATEST(field1, field2);, otrzymasz zestaw wyników z maksimum między polem 1 a polem 2 dla każdego wiersza.
Daniel Vassallo,
Tego właśnie szukałem Byłem pewien, że jest do tego funkcja, ale nie miałem pojęcia o nazwie, teraz ma to sens :)
Emil Borconi
40

W przypadku wybrania NAJWIĘKSZEJ () dla każdego wiersza

SELECT GREATEST(field1, field2)

Zwróci NULL jeśli jedno z pól jest NULL. Możesz użyć IFNULL, aby rozwiązać ten problem

SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))
davis
źródło
Tak, smutne, że musisz to wszystko zrobić, IFNULLnawet jeśli masz dwa tuziny pól do porównania!
Ifedi Okonkwo
6
mysql> SELECT GREATEST(2,0);
        -> 2

Więc spróbuj:

mysql> SELECT GREATEST(MAX(field1), MAX(field2));
Ben
źródło
1
SELECT max( CASE
                WHEN field1 > field2 THEN field1
                ELSE field2
            END ) as biggestvalue 
FROM YourTable;
DRapp
źródło
To rozwiązanie nie jest możliwe, gdy mam 100 kolumn.
Deepak
1
@Deepak, ok, ale odpowiedź sprzed ponad 10 lat, kiedy nie znałem wywołania funkcji „GREATEST” lub „LEAST”, ale oryginalny post pytał o 2 kolumny, a jeśli masz tabelę z setkami kolumn w w podobnym kontekście, musisz ponownie rozważyć poważny problem z projektem bazy danych.
DRapp
Tak dobrze, dzięki za wyjaśnienie. Teraz Twój komentarz pomoże innym dowiedzieć się, czego używać i kiedy.
Deepak
0

Zastosowanie NAJWYŻSZEJ / NAJMNIEJSZEJ z MIN / MAKS

GREATEST / LEAST : używane z kolumnami, gdy chcesz znaleźć wartość maksymalną lub minimalną z różnych kolumn.

MIN / MAX : używane z wierszami, gdy chcesz znaleźć wartość maksymalną lub minimalną z różnych wierszy:

Przykładowa tabela:

wprowadź opis obrazu tutaj

SELECT GREATEST(col_a, col_b, col_c) FROM temp;

wprowadź opis obrazu tutaj

SELECT MIN(GREATEST(col_a, col_b, col_c)) FROM temp; # 3 as output
SELECT MAX(GREATEST(col_a, col_b, col_c)) FROM temp; # 9 as output


SELECT LEAST(col_a, col_b, col_c) FROM temp;

wprowadź opis obrazu tutaj

SELECT MIN(LEAST(col_a, col_b, col_c)) FROM temp; # 1 as output
SELECT MAX(LEAST(col_a, col_b, col_c)) FROM temp; # 7 as output
Deepak
źródło