Größter Wert aus zwei oder mehr Feldern

83

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?

Qiao
quelle
7
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:

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)
Daniel Vassallo
quelle
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

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))
Davis
quelle
Ja, traurig, dass Sie all diese IFNULLDinge tun müssen, auch wenn Sie zwei Dutzend Felder zum Vergleichen haben!
Ifedi Okonkwo
6
mysql> SELECT GREATEST(2,0);
        -> 2

Also versuche:

mysql> SELECT GREATEST(MAX(field1), MAX(field2));
Ben
quelle
1
SELECT max( CASE
                WHEN field1 > field2 THEN field1
                ELSE field2
            END ) as biggestvalue 
FROM YourTable;
DRapp
quelle
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:

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

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;

Geben Sie hier die Bildbeschreibung ein

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
quelle