De MySQL MIN()
functie is een aggregatiefunctie die de minimumwaarde van een uitdrukking retourneert.
Meestal is de expressie een bereik van waarden die als afzonderlijke rijen in een kolom worden geretourneerd, en u kunt deze functie gebruiken om de minimumwaarde uit de geretourneerde rijen te vinden. Als er geen overeenkomende rijen zijn, MIN()
retourneert NULL
.
U kunt deze functie bijvoorbeeld gebruiken om uit te zoeken welke stad de kleinste bevolking heeft van een lijst met steden.
Syntaxis
De syntaxis van MIN()
gaat als volgt:
MIN([DISTINCT] expr) [over_clause]
Waar expr
is de uitdrukking waarvoor u de minimumwaarde wilt.
De over_clause
is een optionele clausule die werkt met vensterfuncties. Merk op dat de over_clause
kan alleen worden gebruikt als u de DISTINCT
. niet gebruikt zoekwoord.
De (optionele) DISTINCT
trefwoord kan worden gebruikt om dubbele waarden te elimineren.
Basisvoorbeeld
Ten eerste zijn hier de onbewerkte gegevens die we in dit voorbeeld zullen gebruiken:
USE world; SELECT Name, Population FROM City WHERE CountryCode = 'THA';
Resultaat:
+-------------------+------------+ | Name | Population | +-------------------+------------+ | Bangkok | 6320174 | | Nonthaburi | 292100 | | Nakhon Ratchasima | 181400 | | Chiang Mai | 171100 | | Udon Thani | 158100 | | Hat Yai | 148632 | | Khon Kaen | 126500 | | Pak Kret | 126055 | | Nakhon Sawan | 123800 | | Ubon Ratchathani | 116300 | | Songkhla | 94900 | | Nakhon Pathom | 94100 | +-------------------+------------+
We kunnen de MIN()
. gebruiken functie om de stad met de kleinste bevolking te vinden (d.w.z. de rij met de kleinste waarde in de bevolkingskolom).
USE world; SELECT MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'THA';
Resultaat:
+---------------+ | Minimum Value | +---------------+ | 94100 | +---------------+
De GROUP BY-clausule
We kunnen de GROUP BY
. gebruiken clausule om elk district op te sommen, samen met de bevolking van de kleinste stad van dat district (per bevolking):
USE world; SELECT District, MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District;
Resultaat:
+-----------------+---------------+ | District | Minimum Value | +-----------------+---------------+ | New South Wales | 219761 | | Victoria | 125382 | | Queensland | 92273 | | West Australia | 1096829 | | South Australia | 978100 | | Capital Region | 322723 | | Tasmania | 126118 | +-----------------+---------------+
De ORDER BY-clausule
We kunnen ook de ORDER BY
. gebruiken clausule om een kolom op te geven waarmee besteld kan worden op:
USE world; SELECT District, MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District ORDER BY `Minimum Value` ASC;
Resultaat:
+-----------------+---------------+ | District | Minimum Value | +-----------------+---------------+ | Queensland | 92273 | | Victoria | 125382 | | Tasmania | 126118 | | New South Wales | 219761 | | Capital Region | 322723 | | South Australia | 978100 | | West Australia | 1096829 | +-----------------+---------------+
Hierdoor worden de resultaten in oplopende volgorde gerangschikt, waarbij de minimumwaarde eerst wordt weergegeven.
Houd er rekening mee dat wanneer u bestelt met een alias met meerdere woorden (zoals `Minimum Value`
), moet u het backtick-teken gebruiken (`
) in plaats van de apostrof ('
) om de twee woorden te omringen.
Vind de minimale tekenlengte
De MIN()
functie is niet beperkt tot alleen kolommen met numerieke gegevens. Je kunt ook MIN()
. combineren met andere functies om minimumwaarden in andere gebieden te retourneren.
Met behulp van onze voorbeeldgegevens kunnen we bijvoorbeeld de waarde met het minimum aantal tekens vinden in de City
kolom:
SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length' FROM city;
Resultaat:
+--------------------------+ | Minimum Character Length | +--------------------------+ | 3 | +--------------------------+
We kunnen dit ook zien door de volgende query te gebruiken (die geen gebruik maakt van de MIN()
functie):
SELECT Name, CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` LIMIT 10;
Resultaat:
+------+------------------+ | Name | Character Length | +------+------------------+ | Ome | 3 | | Yao | 3 | | Qom | 3 | | Itu | 3 | | Tsu | 3 | | Ube | 3 | | Ise | 3 | | Uji | 3 | | Ede | 3 | | Ota | 3 | +------+------------------+
Aangezien meerdere steden dezelfde tekenlengte hebben, kunnen we deze zoekopdracht aanpassen om alleen de afzonderlijke waarden te retourneren:
SELECT DISTINCT CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` LIMIT 10;
Resultaat:
+------------------+ | Character Length | +------------------+ | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | +------------------+
Een OVER-clausule gebruiken
Zoals vermeld, staat de syntaxis een OVER
. toe clausule die in uw vragen moet worden opgenomen. Kortom, de OVER
clausule kunt u specificeren hoe queryrijen in groepen moeten worden verdeeld voor verwerking door de vensterfunctie.
Hier is een voorbeeld:
SELECT District, Name AS City, Population AS 'City Population', MIN(Population) OVER(PARTITION BY District) AS 'District Minimum' FROM City WHERE CountryCode = 'AUS' ORDER BY `District Minimum` DESC;
Resultaat:
+-----------------+---------------+-----------------+------------------+ | District | City | City Population | District Minimum | +-----------------+---------------+-----------------+------------------+ | West Australia | Perth | 1096829 | 1096829 | | South Australia | Adelaide | 978100 | 978100 | | Capital Region | Canberra | 322723 | 322723 | | New South Wales | Sydney | 3276207 | 219761 | | New South Wales | Wollongong | 219761 | 219761 | | New South Wales | Newcastle | 270324 | 219761 | | New South Wales | Central Coast | 227657 | 219761 | | Tasmania | Hobart | 126118 | 126118 | | Victoria | Melbourne | 2865329 | 125382 | | Victoria | Geelong | 125382 | 125382 | | Queensland | Townsville | 109914 | 92273 | | Queensland | Brisbane | 1291117 | 92273 | | Queensland | Cairns | 92273 | 92273 | | Queensland | Gold Coast | 311932 | 92273 | +-----------------+---------------+-----------------+------------------+
Dit voorbeeld verdeelt de rijen op District
, met de minimumwaarde voor elke partitie (district). Hierdoor kunt u gedetailleerdere gegevens zien, zoals de bevolking van elke stad, samen met de bevolking van de kleinste stad (per bevolking) in hetzelfde district.