Die MySQL MAX()
Funktion ist eine Aggregatfunktion, die den Maximalwert eines Ausdrucks zurückgibt.
Normalerweise wäre der Ausdruck ein Wertebereich, der als separate Zeilen in einer Spalte zurückgegeben wird, und Sie können diese Funktion verwenden, um den Maximalwert aus den zurückgegebenen Zeilen zu finden. Wenn es keine übereinstimmenden Zeilen gibt, MAX()
gibt NULL
zurück .
Sie können diese Funktion beispielsweise verwenden, um aus einer Liste von Städten herauszufinden, welche Stadt die größte Bevölkerung hat.
Syntax
Die Syntax von MAX()
geht so:
MAX([DISTINCT] expr) [over_clause]
Wobei expr
ist der Ausdruck, für den Sie den Maximalwert wünschen.
Die over_clause
ist eine optionale Klausel, die mit Fensterfunktionen arbeitet. Beachten Sie, dass die over_clause
kann nur verwendet werden, wenn Sie den DISTINCT
nicht verwenden Schlüsselwort.
Der (optionale) DISTINCT
Schlüsselwort kann verwendet werden, um doppelte Werte zu eliminieren.
Einfaches Beispiel
Hier sind zunächst die Rohdaten, die wir in diesem Beispiel verwenden:
USE world;SELECT Name, PopulationFROM CityWHERE CountryCode ='THA';
Ergebnis:
+--------------+------------+| Name | Bevölkerung |+----------------------+------------+| Bangkok | 6320174 || Nonthaburi | 292100 || Nakhon Ratchasima | 181400 || Chiangmai | 171100 || Udonthani | 158100 || Hut Yai | 148632 || Khon Kaen | 126500 || Pak Kret | 126055 || Nakhon Sawan | 123800 || Ubon Ratchathani | 116300 || Songkhla | 94900 || Nakhon Pathom | 94100 |+--------------------------+------------+
Wir können den MAX()
verwenden Funktion, um die Stadt mit der größten Bevölkerung zu finden (d. h. die Zeile mit dem Höchstwert in ihrer Bevölkerungsspalte).
USE world;SELECT MAX(Population) AS 'Maximal Value'FROM CityWHERE CountryCode ='THA';
Ergebnis:
+---------------+| Höchstwert |+---------------+| 6320174 |+---------------+
Die GROUP BY-Klausel
Wir können den GROUP BY
verwenden Klausel, um jedes Land zusammen mit der Einwohnerzahl der größten Stadt dieses Landes (nach Einwohnerzahl) aufzulisten:
USE world;SELECT District, MAX(Population) AS 'Max Value'FROM CityWHERE CountryCode ='AUS'GROUP BY District;
Ergebnis:
+------------+-----------+| Bezirk | Max. Wert |+------------+-----------+| Neusüdwales | 3276207 || Viktoria | 2865329 || Queensland | 1291117 || Westaustralien | 1096829 || Südaustralien | 978100 || Hauptstadtregion | 322723 || Tasmanien | 126118 |+------------+-----------+
Die ORDER BY-Klausel
Wir können auch den ORDER BY
verwenden -Klausel, um eine Spalte anzugeben, nach der sortiert werden soll:
USE world;SELECT District, MAX(Population) AS 'Max Value'FROM CityWHERE CountryCode ='AUS'GROUP BY DistrictORDER BY `Max Value` ASC;
Ergebnis:
+------------+-----------+| Bezirk | Max. Wert |+------------+-----------+| Tasmanien | 126118 || Hauptstadtregion | 322723 || Südaustralien | 978100 || Westaustralien | 1096829 || Queensland | 1291117 || Viktoria | 2865329 || Neusüdwales | 3276207 |+------------+-----------+
Dadurch werden die Ergebnisse in aufsteigender Reihenfolge sortiert, wobei der Mindestwert zuerst aufgeführt wird.
Beachten Sie, dass bei der Bestellung nach einem aus mehreren Wörtern bestehenden Alias (wie `Max Value`
), müssen Sie das Backtick-Zeichen (`
) verwenden ) anstelle des Apostrophs ('
), um die beiden Wörter einzuschließen.
Finden Sie die maximale Zeichenlänge
Der MAX()
Die Funktion ist nicht auf Spalten mit numerischen Daten beschränkt. Sie können auch MAX()
kombinieren mit anderen Funktionen, um Maximalwerte in anderen Bereichen zurückzugeben.
Anhand unserer Beispieldaten können wir beispielsweise den Wert mit der maximalen Anzahl von Zeichen in City
finden Spalte:
SELECT MAX(CHAR_LENGTH(Name)) AS 'Maximale Zeichenlänge'FROM city;
Ergebnis:
+---------------------+| Maximale Zeichenlänge |+---------------------+| 34 |+---------------------+
Wir können dies auch sehen, indem wir die folgende Abfrage verwenden (die nicht den MAX()
beinhaltet Funktion):
SELECT Name, CHAR_LENGTH(Name) AS 'Zeichenlänge'FROM cityORDER BY 'Zeichenlänge' DESCLIMIT 10;
Ergebnis:
+--------------------------------------+------- -----------+| Name | Zeichenlänge |+--------------------------------------+------- -----------+| Luxemburg [Luxemburg/Lötzebuerg] | 34 || Castellón de la Plana [Castell | 31 || San Fernando del Valle de Cata | 30 || Santo Domingo de los Colorados | 30 || Thiruvananthapuram (Trivandrum | 30 || [San Cristóbal de] la Laguna | 29 || Ingraj Bazar (englischer Bazar) | 28 || Soledad de Graciano Sánchez | 28 || Valle de Chalco Solidaridad | 27 || Machilipatnam (Masulipatam) | 27 |+--------------------------------------+------- -----------+
Eine OVER-Klausel verwenden
Wie bereits erwähnt, erlaubt die Syntax ein OVER
Klausel, die in Ihre Abfragen aufgenommen werden soll. Im Grunde der OVER
-Klausel können Sie angeben, wie Abfragezeilen zur Verarbeitung durch die Fensterfunktion in Gruppen aufgeteilt werden.
Hier ist ein Beispiel:
SELECT District, Name AS City, Population AS 'City Population', MAX(Population) OVER(PARTITION BY District) AS 'District Max'FROM CityWHERE CountryCode ='AUS'ORDER BY `District Max' DESC;
Ergebnis:
In diesem Beispiel werden die Zeilen nach District
partitioniert , wobei der Maximalwert für jede Partition (Distrikt) angegeben wird. Auf diese Weise können Sie detailliertere Daten anzeigen, z. B. die Einwohnerzahl jeder Stadt, zusammen mit der Einwohnerzahl der größten Stadt im selben Bezirk.