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

MIN() – Trova il valore minimo in una colonna in MySQL

Il MySQL MIN() function è una funzione aggregata che restituisce il valore minimo da un'espressione.

In genere, l'espressione è un intervallo di valori restituiti come righe separate in una colonna ed è possibile utilizzare questa funzione per trovare il valore minimo dalle righe restituite. Se non ci sono righe corrispondenti, MIN() restituisce NULL .

Ad esempio, puoi utilizzare questa funzione per scoprire quale città ha la popolazione più piccola da un elenco di città.

Sintassi

La sintassi di MIN() va così:

MIN([DISTINCT] expr) [over_clause]

Dove expr è l'espressione per la quale vuoi il valore minimo.

La over_clause è una clausola facoltativa che funziona con le funzioni della finestra. Nota che la over_clause può essere utilizzato solo se non utilizzi il DISTINCT parola chiave.

Il DISTINCT (opzionale). la parola chiave può essere utilizzata per eliminare i valori duplicati.

Esempio di base

Innanzitutto, ecco i dati grezzi che utilizzeremo in questo esempio:

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

Risultato:

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

Possiamo usare il MIN() funzione per trovare la città con la popolazione più piccola (ovvero la riga con il valore più piccolo nella colonna della sua popolazione).

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

Risultato:

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

La clausola GROUP BY

Possiamo usare il GROUP BY clausola per elencare ogni distretto, insieme alla popolazione della città più piccola di quel distretto (per popolazione):

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

Risultato:

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

La clausola ORDER BY

Possiamo anche usare il ORDER BY clausola per specificare una colonna con cui ordinare per:

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

Risultato:

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

Questo ordina i risultati in ordine crescente, che elenca per primo il valore minimo.

Nota che, quando ordini con un alias composto da più parole (come `Minimum Value` ), devi utilizzare il carattere di apice inverso (` ) invece dell'apostrofo (' ) per racchiudere le due parole.

Trova la lunghezza minima dei caratteri

Il MIN() la funzione non è limitata alle sole colonne con dati numerici. Puoi anche combinare MIN() con altre funzioni per restituire valori minimi in altre aree.

Ad esempio, utilizzando i nostri dati di esempio, possiamo trovare il valore con il numero minimo di caratteri nella City colonna:

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

Risultato:

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

Possiamo anche vederlo usando la seguente query (che non coinvolge il MIN() funzione):

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

Risultato:

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

Dato che più città hanno la stessa lunghezza di caratteri, possiamo modificare questa query per restituire solo i valori distinti:

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

Risultato:

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

Utilizzo di una clausola OVER

Come accennato, la sintassi consente un OVER clausola da includere nelle vostre domande. Fondamentalmente, il OVER La clausola consente di specificare come suddividere le righe di query in gruppi per l'elaborazione mediante la funzione finestra.

Ecco un esempio:

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;

Risultato:

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

Questo esempio partiziona le righe per District , fornendo il valore minimo per ciascuna partizione (distretto). Ciò ti consente di visualizzare dati più dettagliati, come la popolazione di ciascuna città, insieme alla popolazione della città più piccola (per popolazione) nello stesso distretto.