Jeśli chcesz uzyskać absolutne maksimum ze wszystkich wierszy, możesz użyć następujących elementów:
SELECTGREATEST(MAX(field1), MAX(field2));
Przykład 1:
SELECTGREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
| 2 |
+----------------+
1 row in set (0.00 sec)
Przykład 2:
CREATETABLE a (a int, b int);
INSERTINTO a VALUES (1, 1);
INSERTINTO a VALUES (2, 1);
INSERTINTO a VALUES (3, 1);
INSERTINTO a VALUES (1, 2);
INSERTINTO a VALUES (1, 4);
SELECTGREATEST(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
SELECTGREATEST(field1, field2)
Zwróci NULL jeśli jedno z pól jest NULL. Możesz użyć IFNULL, aby rozwiązać ten problem
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:
SELECTGREATEST(col_a, col_b, col_c) FROM temp;
SELECTMIN(GREATEST(col_a, col_b, col_c)) FROM temp; # 3 as outputSELECTMAX(GREATEST(col_a, col_b, col_c)) FROM temp; # 9 as outputSELECTLEAST(col_a, col_b, col_c) FROM temp;
SELECTMIN(LEAST(col_a, col_b, col_c)) FROM temp; # 1 as outputSELECTMAX(LEAST(col_a, col_b, col_c)) FROM temp; # 7 as output
GREATEST()
dla największego podobnieLEAST()
dla najmniejszego.Odpowiedzi:
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)
źródło
GREATEST(MAX(field1), MAX(field2))
działa. W przeciwnym razie zwracany jest zły numer (nie największy)SELECT GREATEST(MAX(field1), MAX(field2));
uzyskać absolutne maksimum ze wszystkich wierszy. Jeśli użyjeszSELECT GREATEST(field1, field2);
, otrzymasz zestaw wyników z maksimum między polem 1 a polem 2 dla każdego wiersza.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))
źródło
IFNULL
nawet jeśli masz dwa tuziny pól do porównania!mysql> SELECT GREATEST(2,0); -> 2
Więc spróbuj:
mysql> SELECT GREATEST(MAX(field1), MAX(field2));
źródło
SELECT max( CASE WHEN field1 > field2 THEN field1 ELSE field2 END ) as biggestvalue FROM YourTable;
źródło
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:
SELECT GREATEST(col_a, col_b, col_c) FROM temp;
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;
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
źródło