Die MySQL MIN()
Funktion ist eine Aggregatfunktion, die den Mindestwert 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 Mindestwert aus den zurückgegebenen Zeilen zu finden. Wenn es keine übereinstimmenden Zeilen gibt, MIN()
gibt NULL
zurück .
Sie können diese Funktion beispielsweise verwenden, um aus einer Liste von Städten herauszufinden, welche Stadt die wenigsten Einwohner hat.
Syntax
Die Syntax von MIN()
geht so:
MIN([DISTINCT] expr) [over_clause]
Wobei expr
ist der Ausdruck, für den Sie den Mindestwert 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 MIN()
verwenden Funktion, um die Stadt mit der kleinsten Bevölkerung zu finden (d. h. die Zeile mit dem kleinsten Wert in ihrer Bevölkerungsspalte).
USE world;SELECT MIN(Population) AS 'Mindestwert'FROM CityWHERE CountryCode ='THA';
Ergebnis:
+---------------+| Mindestwert |+---------------+| 94100 |+---------------+
Die GROUP BY-Klausel
Wir können den GROUP BY
verwenden Klausel zur Auflistung jedes Bezirks zusammen mit der Einwohnerzahl der kleinsten Stadt dieses Bezirks (nach Einwohnerzahl):
USE world;SELECT District, MIN(Population) AS 'Mindestwert'FROM CityWHERE CountryCode ='AUS'GROUP BY District;
Ergebnis:
+-----------------+---------------+| Bezirk | Mindestwert |+----------------+---------------+| Neusüdwales | 219761 || Viktoria | 125382 || Queensland | 92273 || 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, MIN(Population) AS 'Mindestwert'FROM CityWHERE CountryCode ='AUS'GROUP BY DistrictORDER BY `Minimum Value` ASC;
Ergebnis:
+-----------------+---------------+| Bezirk | Mindestwert |+----------------+---------------+| Queensland | 92273 || Viktoria | 125382 || Tasmanien | 126118 || Neusüdwales | 219761 || Hauptstadtregion | 322723 || Südaustralien | 978100 || Westaustralien | 1096829 |+----------------+---------------+
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 `Minimum Value`
), müssen Sie das Backtick-Zeichen (`
) verwenden ) anstelle des Apostrophs ('
), um die beiden Wörter einzuschließen.
Finden Sie die Mindestzeichenlänge
Der MIN()
Die Funktion ist nicht auf Spalten mit numerischen Daten beschränkt. Sie können auch MIN()
kombinieren mit anderen Funktionen, um Mindestwerte in anderen Bereichen zurückzugeben.
Anhand unserer Beispieldaten können wir beispielsweise den Wert mit der minimalen Anzahl von Zeichen in City
finden Spalte:
SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimale Zeichenlänge'FROM city;
Ergebnis:
+---------------------+| Minimale Zeichenlänge |+---------------------+| 3 |+---------------------+
Wir können dies auch sehen, indem wir die folgende Abfrage verwenden (die nicht die MIN()
beinhaltet Funktion):
SELECT Name, CHAR_LENGTH(Name) AS 'Character Length'FROM cityORDER BY `Character Length`LIMIT 10;
Ergebnis:
+------+------------------+| Name | Zeichenlänge |+------+------------------+| Ome | 3 || Jao | 3 || Qom | 3 || Es | 3 || Tsu | 3 || Ube | 3 || Ise | 3 || Uji | 3 || Ed | 3 || Ota | 3 |+------+-----------------+
Da mehrere Städte die gleiche Zeichenlänge haben, können wir diese Abfrage so anpassen, dass nur die unterschiedlichen Werte zurückgegeben werden:
SELECT DISTINCT CHAR_LENGTH(Name) AS 'Character Length'FROM cityORDER BY `Character Length`LIMIT 10;
Ergebnis:
+------------------+| Zeichenlänge |+------------------+| 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 |+-----------------+
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', MIN(Population) OVER(PARTITION BY District) AS 'District Minimum'FROM CityWHERE CountryCode ='AUS'ORDER BY `District Minimum' DESC;
Ergebnis:
In diesem Beispiel werden die Zeilen nach District
partitioniert , der den Mindestwert für jede Partition (Distrikt) bereitstellt. Auf diese Weise können Sie detailliertere Daten anzeigen, z. B. die Einwohnerzahl jeder Stadt, zusammen mit der Einwohnerzahl der kleinsten Stadt (nach Einwohnerzahl) im selben Bezirk.