Ich muss den größten Wert aus zwei Bereichen ziehen:
SELECT MAX(field1), MAX(field2)
Wie kann ich nun den größten Nutzen aus diesen beiden ziehen?
Antworten:
Möglicherweise möchten Sie die GREATEST()Funktion verwenden:
SELECT GREATEST(field1, field2);
Wenn Sie das absolute Maximum aus allen Zeilen erhalten möchten, können Sie Folgendes verwenden:
SELECT GREATEST(MAX(field1), MAX(field2));
Beispiel 1:
SELECT GREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
| 2 |
+----------------+
1 row in set (0.00 sec)
Beispiel 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)
GREATEST(MAX(field1), MAX(field2))es funktioniert nur. Andernfalls wird eine falsche Nummer zurückgegeben (nicht die größte)
SELECT GREATEST(MAX(field1), MAX(field2));das absolute Maximum aus allen Zeilen erhalten. Wenn Sie verwenden, erhalten SELECT GREATEST(field1, field2);Sie eine Ergebnismenge mit dem Maximum zwischen Feld1 und Feld2 für jede Zeile zurück.
Falls Sie für jede Zeile das GRÖSSTE () auswählen
SELECT GREATEST(field1, field2)
Es wird NULL zurückgegeben, wenn eines der Felder NULL ist. Sie können IFNULL verwenden, um dies zu lösen
SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))
IFNULLDinge tun müssen, auch wenn Sie zwei Dutzend Felder zum Vergleichen haben!
SELECT max( CASE
WHEN field1 > field2 THEN field1
ELSE field2
END ) as biggestvalue
FROM YourTable;
Verwendung von GREATEST / LEAST mit MIN / MAX
GREATEST / LEAST : Wird mit den Spalten verwendet, wenn Sie den Maximal- oder Minimalwert aus den verschiedenen Spalten ermitteln möchten.
MIN / MAX : Wird mit den Zeilen verwendet, wenn Sie den Max- oder Min-Wert aus den verschiedenen Zeilen ermitteln möchten:
Beispieltabelle:
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
GREATEST()für die größten ähnlichLEAST()für die kleinsten.