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?


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)

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

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));

1
SELECT max( CASE
                WHEN field1 > field2 THEN field1
                ELSE field2
            END ) as biggestvalue 
FROM YourTable;

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.