sql >> Databasteknik >  >> RDS >> Mysql

MIN() – Hitta minimivärdet i en kolumn i MySQL

MySQL MIN() funktion är en aggregerad funktion som returnerar minimivärdet från ett uttryck.

Vanligtvis skulle uttrycket vara ett värdeintervall som returneras som separata rader i en kolumn, och du kan använda den här funktionen för att hitta minimivärdet från de returnerade raderna. Om det inte finns några matchande rader, MIN() returnerar NULL .

Du kan till exempel använda den här funktionen för att ta reda på vilken stad som har den minsta befolkningen av en lista med städer.

Syntax

Syntaxen för MIN() går så här:

MIN([DISTINCT] expr) [over_clause]

Där expr är uttrycket som du vill ha minimivärdet för.

 over_clause är en valfri klausul som fungerar med fönsterfunktioner. Observera att over_clause kan endast användas om du inte använder DISTINCT nyckelord.

Den (valfria) DISTINCT nyckelord kan användas för att eliminera dubbletter av värden.

Grundläggande exempel

Först, här är rådata som vi kommer att använda i det här exemplet:

USE world;
SELECT Name, Population
FROM City
WHERE CountryCode = 'THA';

Resultat:

+-------------------+------------+
| 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 |
+-------------------+------------+

Vi kan använda MIN() funktion för att hitta staden med den minsta befolkningen (dvs. raden med det minsta värdet i sin befolkningskolumn).

USE world;
SELECT MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'THA';

Resultat:

+---------------+
| Minimum Value |
+---------------+
|         94100 |
+---------------+

GROUP BY-klausulen

Vi kan använda GROUP BY klausul för att lista ut varje distrikt, tillsammans med befolkningen i det distriktets minsta stad (efter befolkning):

USE world;
SELECT District, MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District;

Resultat:

+-----------------+---------------+
| District        | Minimum Value |
+-----------------+---------------+
| New South Wales |        219761 |
| Victoria        |        125382 |
| Queensland      |         92273 |
| West Australia  |       1096829 |
| South Australia |        978100 |
| Capital Region  |        322723 |
| Tasmania        |        126118 |
+-----------------+---------------+

ORDER BY-klausulen

Vi kan också använda ORDER BY sats för att ange en kolumn som du kan beställa efter:

USE world;
SELECT District, MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Minimum Value` ASC;

Resultat:

+-----------------+---------------+
| District        | Minimum Value |
+-----------------+---------------+
| Queensland      |         92273 |
| Victoria        |        125382 |
| Tasmania        |        126118 |
| New South Wales |        219761 |
| Capital Region  |        322723 |
| South Australia |        978100 |
| West Australia  |       1096829 |
+-----------------+---------------+

Detta ordnar resultaten i stigande ordning, som listar minimivärdet först.

Observera att när du beställer efter ett alias med flera ord (som `Minimum Value` ), måste du använda backteck-tecknet (` ) istället för apostrof (' ) för att omge de två orden.

Hitta den minsta teckenlängden

MIN() Funktionen är inte begränsad till bara kolumner med numeriska data. Du kan också kombinera MIN() med andra funktioner för att returnera minimivärden i andra områden.

Med hjälp av våra exempeldata kan vi till exempel hitta värdet med det minsta antalet tecken i City kolumn:

SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length'
FROM city;

Resultat:

+--------------------------+
| Minimum Character Length |
+--------------------------+
|                        3 |
+--------------------------+

Vi kan också se detta genom att använda följande fråga (som inte involverar MIN() funktion):

SELECT Name, CHAR_LENGTH(Name) AS 'Character Length'
FROM city
ORDER BY `Character Length`
LIMIT 10;

Resultat:

+------+------------------+
| Name | Character Length |
+------+------------------+
| Ome  |                3 |
| Yao  |                3 |
| Qom  |                3 |
| Itu  |                3 |
| Tsu  |                3 |
| Ube  |                3 |
| Ise  |                3 |
| Uji  |                3 |
| Ede  |                3 |
| Ota  |                3 |
+------+------------------+

Eftersom flera städer har samma teckenlängd kan vi justera den här frågan så att den endast returnerar de distinkta värdena:

SELECT DISTINCT CHAR_LENGTH(Name) AS 'Character Length'
FROM city
ORDER BY `Character Length`
LIMIT 10;

Resultat:

+------------------+
| Character Length |
+------------------+
|                3 |
|                4 |
|                5 |
|                6 |
|                7 |
|                8 |
|                9 |
|               10 |
|               11 |
|               12 |
+------------------+

Använda en OVER-klausul

Som nämnts tillåter syntaxen en OVER klausul som ska inkluderas i dina frågor. I princip OVER sats låter dig specificera hur du partitionerar frågerader i grupper för bearbetning av fönsterfunktionen.

Här är ett exempel:

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;

Resultat:

+-----------------+---------------+-----------------+------------------+
| 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 |
+-----------------+---------------+-----------------+------------------+

Det här exemplet delar upp raderna efter District , tillhandahåller det lägsta värdet för varje partition (distrikt). Detta gör att du kan se mer detaljerad information, som varje stads befolkning, tillsammans med befolkningen i den minsta staden (efter befolkning) i samma distrikt.


  1. Använda Oracle JDeveloper 12c med Oracle Database 12c på Oracle Cloud Platform, del 2

  2. IF-THEN-ELSE-satser i postgresql

  3. Hur man gör en batchinsättning i MySQL

  4. Radnummer med icke-deterministisk ordning