GREATEST()für die größten ähnlich LEAST()für die kleinsten.
James Oravec
Antworten:
167
Möglicherweise möchten Sie die GREATEST()Funktion verwenden:
SELECTGREATEST(field1, field2);
Wenn Sie das absolute Maximum aus allen Zeilen erhalten möchten, können Sie Folgendes verwenden:
SELECTGREATEST(MAX(field1), MAX(field2));
Beispiel 1:
SELECTGREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
| 2 |
+----------------+
1 row in set (0.00 sec)
Beispiel 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)
Ich weiß nicht warum, aber GREATEST(MAX(field1), MAX(field2))es funktioniert nur. Andernfalls wird eine falsche Nummer zurückgegeben (nicht die größte)
Qiao
1
@ Qiao: Ja, Sie müssten 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.
Daniel Vassallo
Das war es, wonach ich gesucht habe. Ich war mir sicher, dass es eine Funktion dafür gibt, aber ich hatte keine Ahnung vom Namen, jetzt macht es vollkommen Sinn :)
Emil Borconi
39
Falls Sie für jede Zeile das GRÖSSTE () auswählen
SELECTGREATEST(field1, field2)
Es wird NULL zurückgegeben, wenn eines der Felder NULL ist. Sie können IFNULL verwenden, um dies zu lösen
Diese Lösung ist nicht möglich, wenn ich Hunderte von Spalten habe.
Deepak
1
@Deepak, ok, aber eine Antwort von vor über 10 Jahren, als ich den Funktionsaufruf "GREATEST" oder "LEAST" nicht kannte, aber im ursprünglichen Beitrag nach 2 Spalten gefragt wurde und ob Sie eine Tabelle mit Hunderten von Spalten haben Wenn Sie einen ähnlichen Kontext haben, müssen Sie ein ernstes Problem mit dem Datenbankdesign überdenken.
DRapp
Ja richtig, danke für die Klarstellung. Jetzt hilft Ihr Kommentar anderen, was wann zu verwenden ist.
Deepak
0
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:
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()
für die größten ähnlichLEAST()
für die kleinsten.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)
quelle
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, erhaltenSELECT 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))
quelle
IFNULL
Dinge tun müssen, auch wenn Sie zwei Dutzend Felder zum Vergleichen haben!mysql> SELECT GREATEST(2,0); -> 2
Also versuche:
mysql> SELECT GREATEST(MAX(field1), MAX(field2));
quelle
SELECT max( CASE WHEN field1 > field2 THEN field1 ELSE field2 END ) as biggestvalue FROM YourTable;
quelle
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
quelle