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

MIN() – Finden Sie den Mindestwert in einer Spalte in MySQL

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:

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

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.