sql >> Database teknologi >  >> RDS >> Mysql

MIN() – Find minimumsværdien i en kolonne i MySQL

 MySQL MIN() funktion er en aggregeret funktion, der returnerer minimumsværdien fra et udtryk.

Typisk vil udtrykket være et interval af værdier, der returneres som separate rækker i en kolonne, og du kan bruge denne funktion til at finde minimumsværdien fra de returnerede rækker. Hvis der ikke er nogen matchende rækker, MIN() returnerer NULL .

For eksempel kan du bruge denne funktion til at finde ud af, hvilken by der har den mindste befolkning ud af en liste over byer.

Syntaks

Syntaksen for MIN() går sådan her:

MIN([DISTINCT] expr) [over_clause]

Hvor expr er det udtryk, som du ønsker minimumsværdien for.

 over_clause er en valgfri klausul, der fungerer med vinduesfunktioner. Bemærk, at over_clause kan kun bruges, hvis du ikke bruger DISTINCT søgeord.

Den (valgfri) DISTINCT søgeord kan bruges til at eliminere duplikerede værdier.

Grundlæggende eksempel

For det første er her de rå data, som vi vil bruge i dette eksempel:

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 bruge MIN() funktion til at finde byen med den mindste befolkning (dvs. rækken med den mindste værdi i dens befolkningskolonne).

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

Resultat:

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

GROUP BY-klausulen

Vi kan bruge GROUP BY klausul for at angive hvert distrikt sammen med befolkningen i det distrikts mindste by (efter indbyggertal):

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 også bruge ORDER BY klausul for at specificere en kolonne, der skal bestilles 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 |
+-----------------+---------------+

Dette ordner resultaterne i stigende rækkefølge, som viser minimumværdien først.

Bemærk, at når du bestiller efter et alias med flere ord (som `Minimum Value` ), skal du bruge backtick-tegnet (` ) i stedet for apostrof (' ) for at omgive de to ord.

Find den mindste tegnlængde

MIN() funktion er ikke begrænset til kun kolonner med numeriske data. Du kan også kombinere MIN() med andre funktioner for at returnere minimumsværdier i andre områder.

Ved at bruge vores eksempeldata kan vi f.eks. finde værdien med det mindste antal tegn i City kolonne:

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

Resultat:

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

Vi kan også se dette ved at bruge følgende forespørgsel (som ikke involverer 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 |
+------+------------------+

Da flere byer har samme tegnlængde, kan vi justere denne forespørgsel til kun at returnere de forskellige værdier:

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

Brug af en OVER-klausul

Som nævnt tillader syntaksen en OVER klausul, der skal inkluderes i dine forespørgsler. Grundlæggende er OVER klausul giver dig mulighed for at specificere, hvordan du opdeler forespørgselsrækker i grupper til behandling af vinduesfunktionen.

Her er et eksempel:

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

Dette eksempel opdeler rækkerne efter District , der angiver minimumsværdien for hver partition (distrikt). Dette giver dig mulighed for at se mere detaljerede data, såsom hver bys befolkning, sammen med befolkningen i den mindste by (efter indbyggertal) i det samme distrikt.


  1. Slut dig til mig på PAUG Database Designer Conference

  2. Microsoft Access DevCon i Wien Østrig 1. – 2. april 2017

  3. Sådan viser du rækker, der ikke er til stede i en anden tabel i MySQL

  4. Er der en Max-funktion i SQL Server, der tager to værdier som Math.Max ​​i .NET?