Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MAX() – Finden Sie den Maximalwert in einer Spalte in MySQL

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:

+------------+---------------+------------ -----+--------------+| Bezirk | Stadt | Stadtbevölkerung | Bezirk Max |+------------+---------------+------------ -----+--------------+| Neusüdwales | Sydney | 3276207 | 3276207 || Neusüdwales | Wollongong | 219761 | 3276207 || Neusüdwales | Neuburg | 270324 | 3276207 || Neusüdwales | Zentrale Küste | 227657 | 3276207 || Viktoria | Melbourne | 2865329 | 2865329 || Viktoria | Geelong | 125382 | 2865329 || Queensland | Stadtville | 109914 | 1291117 || Queensland | Brisbane | 1291117 | 1291117 || Queensland | Steinhaufen | 92273 | 1291117 || Queensland | Goldküste | 311932 | 1291117 || Westaustralien | Perth | 1096829 | 1096829 || Südaustralien | Adelheid | 978100 | 978100 || Hauptstadtregion | Canberra | 322723 | 322723 || Tasmanien | Hobart | 126118 | 126118 |+----------------+---------------+--------------------- ----+--------------+

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.