sql >> Database >  >> RDS >> Mysql

MIN() – Zoek de minimumwaarde in een kolom in MySQL

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.


  1. Hoe maak je een index op het datumgedeelte van het DATETIME-veld in MySql

  2. POWER() Voorbeelden in SQL Server

  3. SQLite en database-initialisatie

  4. De SQL Server-hoofddatabase herstellen